docs(mvp): 记录 S7.0 输出契约裁决 = 分支①(建不落库全文通路)
live 单体取全 SSE/UI/DB 三项证据:后端不发 chunk、done 只带 taskId/suggestionId/summary、 content_snapshot.content 仅 50-60 字脱敏摘要 → 现状无全文通路,用户只看到摘要。所有者确认 S7 走分支①:runtime 内存全文经 SSE(填已声明 chunk.data.content)推前端,候选表仍只存摘要+三审, 保数据主权。provider 无关、与切 Dify 正交;落地前须出评审版设计,provider 半段依赖 Muse 专属 Dify workspace。 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5ab58a4ed9
commit
aadc0aa8ab
@ -39,6 +39,8 @@
|
||||
|
||||
**2.0.0 单人版改造 S5 后端起栈与 MSW-off 创作主线 e2e 打通(2026-07-07)**:补齐上一条的未完成项——修好后端活体启动口径并跑通全量创作主线 e2e。上一条卡在的 `muse_local` Flyway owner 问题的真因是:标准启动默认落陈旧的 `muse_local`(仅 baseline 到 V0、缺 yudao 基座、`update_updated_at_column()` 函数属第三个角色 `muse`),以 root/muse_dev 跑 Flyway V1 的 `CREATE OR REPLACE FUNCTION` 必报 must-be-owner;`muse_dev` 本身是角色不是库。唯一健康的 live 库是 `root@muse_slice_live`(已迁至 V34、含 yudao 基座与登录种子)。已把 `application-infra.yaml` 与 `start-muse-server-infra.sh` 的默认库/用户从 `muse_local/muse_dev` 改为 `muse_slice_live/root`,真实值仍由 `infra.env` 覆盖。关掉 owner 陷阱后又暴露 S4 追补仍漏关的 `moderation`:`OpenAiModerationAutoConfiguration` 默认 matchIfMissing=true,全量 boot 会实例化 `openAiModerationModel`、无 OpenAI key 直接使单体启动失败;已在 monolith 真正加载的 `muse-server/application.yaml` 与 `ai-server/application.yaml` 两处补 `spring.ai.model.moderation: none`。这处漏网印证了 `SoloExternalAiProviderGateTest` 的结构性盲区——它用 `ApplicationContextRunner` 切片上下文只断言厂商 Bean 缺席,不加载 moderation 自装配,捕不到全量 boot 失败,只有真起才暴露。验收证据:`muse-server` 干净启动(`Started in 22.4s`、Flyway `validated 35 migrations / up to date`、零 owner error),`/works` code:0(真实 56 部作品)、`/app-api/market/**` code:404(S3 摘装配活体确认);MSW-off 创作主线全量 Playwright(真 48080 + 真 `muse_slice_live` + 真 New-API 生成 + 真 RAGFlow 检索)**33 passed / 0 failed / 31 隔离**,覆盖候选采纳(含真生成+reject 归档)、导入向导、导出下载、知识草稿/确认/图谱/实体、绑定、agent 生命周期与槽位、AI 真生成(真 LLM 正文落库)、规划编辑、solo 路由重定向;31 个隔离用例经 `test.skip` 明写 S5 单人版隔离原因(market/handoff/account-market 深页)。回归网 `run-p1r-verification.sh local` 65/0F/0E BUILD SUCCESS,config 改动无回归。过程中还复现了 external-deps §四 的 stale-jar 坑:改配置后用 `-pl muse-server`(无 `-am`)重打会从 .m2 拉陈旧上游 jar 丢新端点(knowledge-retrieval 404、import-wizard 超时),`clean package -am` 后即全绿。另修 `workspace.spec` 冒烟缺 token 注入被 S5 新增 AuthGuard 拦重定向的测试债。提交 `9af47128`(后端起栈+DB对齐+e2e)、`92b90878`(登录栈种子+OAuth2 scopes 兜底,`OAuth2TokenServiceImplTest` 14/0F/0E)。**S5 经项目所有者 2026-07-07 验收标记完成**(本条 e2e gate 达成即 S5 收口,supersede 上一条“不得标记完成”的在途状态)。moderation 这类“全量 boot 起不来”的机械守卫不用切片 `ApplicationContextRunner` 补——它跑的是合成属性值而非真 `application.yaml`,挡不住“真 yaml 掉了 moderation 行”的回归,补了反而是假绿;真正的守卫层是 S9 golden-journey 的真起冒烟(无 Nacos 干净启动 + 黄金旅程),故该 boot 门归 S9,不在本步补合成测试。遗留:Dify 实例被游戏/Muse 共用、workspace 须隔离的约束已入 `.agents/knowledge/external-deps-and-gotchas.md`(S1/S6 落 Dify 凭据前须校验归属 workspace)。
|
||||
|
||||
**2.0.0 单人版改造 S7.0 输出契约裁决(2026-07-07)**:在 live 单体(真 48080 + 真 New-API)上取全 plan 要求的三项证据后裁定 **S7 走分支①(建运行时不落库全文通路)**,项目所有者 2026-07-07 确认。证据:①SSE 流——后端不发 chunk(histogram chunk=0),dispatcher 同步生成完整文本后只写一条 `done`,`MuseAiTaskStreamServiceImpl.doneData` 只带 `{taskId, suggestionId, summary?}`,全文不经 SSE;②UI——CandidatePanel 凭 suggestionId 走 `GET /suggestions/{id}` 读 `data.content`;③DB——`muse_ai_suggestion.content_snapshot.content` 实测仅 50–60 字脱敏摘要(键 `content`+`outputSummary`),而原始 LLM 输出 >120 字。结论:现状用户在候选面板只看到 ~50 字脱敏摘要、看不到 AI 全文,分支②“已有全文通路”的前提不成立,AI 生成对用户长期半残。分支① 目标:runtime 内部结果加不落库的内存全文字段,经 SSE 填充 OpenAPI 已声明但当前未发的 `chunk.data.content` 推给前端(不新增破坏性字段),候选表仍只存脱敏摘要+三审,accept 走 merge_after_edit——全文只在传输/内存存在、永不落候选表,保住“AI 原始产出不落库、先审后入”主权。该通路 provider 无关(New-API/Dify 均透出全文到该字段),与切 Dify 正交。落地前置:按工程约定,S7 属跨模块+用户可见行为变更,须先出评审版设计再实现;provider 切 Dify 半段依赖 Muse 专属 Dify workspace 就绪。
|
||||
|
||||
**E1 content 创作闭环切片(2026-06-27)**:已补 AI suggestion 采纳归档、前端“改后合并”入口、IndexedDB 草稿键对账、旧知识草稿失效、工作台知识/导入/导出/记录入口、Block 版本历史最小 API/UI。Content merge 写 Canonical 与来源归因后,必须由 AI owner 写 `accepted` 状态、accepted decision archive、AI command、business audit;AI owner 不可用时整笔 merge 回滚,避免 Canonical 已写但候选仍 pending。Content 正文变更后通过 Knowledge owner API 将关联 pending draft 标为 `conflicted/needs_recheck` 并写 Knowledge draft decision archive;通知失败不回滚 Canonical 主写,Knowledge confirm 端仍按来源状态 fail-closed。Studio `CandidatePanel` 支持编辑最终正文并按 `accept_as_is`/`modify_then_merge` 提交,IndexedDB 草稿键改为 `workId+blockId+revision` 防跨作品/版本污染。`saveBlock`/`mergeBlockSuggestion` 现在写 `muse_content_block_revision_snapshot`,工作台“历史”Tab 只读展示 Canonical revision 快照;导入可创建真实任务,导出支持范围/格式选择、任务查询与下载凭证消费,知识/记录入口跳转对应工作台。fresh 证据:后端局部单测 `ContentSourceServiceTest` 25/0F/0E、`ContentAppServiceTest` 19/0F/0E、`MuseKnowledgeDraftInvalidationServiceTest` 3/0F/0E、`AiSuggestionMergeProjectionFacadeTest` 7/0F/0E;契约/覆盖门 `ContractFirstGateTest` 4/0F/0E + `P1rApiCoverageReportTest` 8/0F/0E;real-PG `P1rContentCoreCompletedApprovalIT` 13/0F/0E/0S + `P1rContentMergeSuggestionIT` 5/0F/0E/0S + `P1rContentMergeGeneratedSuggestionIT` 1/0F/0E/0S;studio `tsc -b --force` 通过、lint 0 errors、Vitest 12/12,追加 `AIPanel.contract.test.tsx` + `sse.test.ts` 22/0F/0E;导出 UI 追加 `useWorks.test.tsx`+`ExportWorkModal.test.tsx` 11/0F/0E、目标 ESLint 0 errors。共享 PG 写入闸门批准后已补跑 MSW-off Playwright 真后端 `accept-suggestion.spec.ts` 2/0F/0E:正路真 New-API 生成 suggestionId=79、authz `rpe-local-*`、Block revision 160→161、AI owner accepted decision archive 非空;负路 stale revision 业务冲突。边界:`muse-studio/src/types/content.ts` 生成类型因 openapi-typescript 版本漂移未同步,hook 内暂维护 `BlockRevision` 最小类型;完整导入向导已在 RC 后补,见下方记录;真后端导出下载 e2e 已在 2026-06-28 补跑通过,FileApi 异常仍按后端合同 fail-closed。
|
||||
|
||||
**E2 ai 智能体生命周期与候选处置闭环(2026-06-27)**:已补用户自建 Agent update/archive、初始版本自动创建、版本列表/激活/归档非当前版本、作品槽位 unbind、Studio reject 调后端 AI owner 决策归档。Agent update 会创建下一 active version 并更新 `current_version_id`,archive Agent 同步归档仍 active 的槽位绑定;slot unbind 将绑定行 revision+1 且 `status=archived`,运行时回到默认能力;WorkspacePage “放弃修改”不再只清本地候选,而是真打 `POST /suggestions/{id}/reject` 写 `rejected` 与 decision archive。启动修红:最新单体启动时暴露 `muse.codegen.importEnable` 缺省,已在 `muse-server/src/main/resources/application.yaml` 补 `import-enable:false`,随后 48080 成功启动并 `GET /app-api/muse/agents` smoke 返回 `code=0`。fresh 证据:后端 AI targeted `MuseAgentServiceTest`+`MuseAgentSlotServiceTest`+Controller annotation 63/0F/0E;契约门 `ContractFirstGateTest` 4/0F/0E;studio `tsc -b --force` 通过、目标 ESLint 0 errors、Vitest 29/0F/0E;MSW-off Playwright 真后端 `agent-create.spec.ts`+`agent-slot-bind.spec.ts`+`accept-suggestion.spec.ts` 5/0F/0E:采纳真生成 suggestionId=80、Block revision 161→162、accepted decision archive 非空;拒绝真生成 suggestionId=81、`status=rejected`、decision archive 非空;Agent 生命周期 DB 核验 v1/v2 current 切换与 v2 archived;Slot unbind DB 核验 revision 2→3、status archived、响应 `sourceStatus=unbound`。边界:本轮未跑 studio 全量 e2e。
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user