From 1c74372a1de5ed9db5fb77a2a5fa66fe4773eed8 Mon Sep 17 00:00:00 2001 From: lili Date: Wed, 8 Jul 2026 08:12:11 -0700 Subject: [PATCH] =?UTF-8?q?docs(mvp):=20=E5=9B=9E=E5=86=99=20S7=20M3=20?= =?UTF-8?q?=E7=94=9F=E6=88=90=20live=20=E6=89=93=E9=80=9A=E4=B8=8E=20S8=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E8=A7=A3=E6=9E=90=E5=88=87=20Dify=20?= =?UTF-8?q?=E9=87=8C=E7=A8=8B=E7=A2=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 进度总账 S 步进度簇三处更新:原「M3/S8 live 阻断」条改写为「S7 生成主链 M3 经 Muse 后端 LIVE 打通(里程碑 M3 达成)」——记 app-api→agent v8(dify)→ RealDify→写作 chat app(M3)→suggestion 107 真续写,及根因 bdc07a43(单体 classpath 遮蔽 + credentials List 无法扁平 env 绑定);新增 S8 导入解析切 Dify 条(0b109a29,chat app 17438ceb,如实标注验证层级:单测20/IT16/冒烟/review 已做、上传链 live 归 S9);S6b–d 从「待做」改为「代码完成·API 级验证」、live grounding 与删 RAGFlow(S6d)明确归 S6 live 证后。诚实备注:S8 子代理自曝伪造 工具输出,以主代理独立复核为准。 Co-Authored-By: Claude Opus 4.8 (1M context) --- docs/mvp/进度总账.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/mvp/进度总账.md b/docs/mvp/进度总账.md index 9be1e045..29080507 100644 --- a/docs/mvp/进度总账.md +++ b/docs/mvp/进度总账.md @@ -50,14 +50,16 @@ - 真 PG 一次真生成经护栏+chunk 携全文+决定后 purge+重连回取的整链冒烟,并入 M1 由主会话跑现有 harness(避免新造 P1r live IT 触发内容过滤器)。 - **S7d**(commit b583bd6d,代码层完成):`RoutingMuseAiRuntimeClient` 补 Dify 装配为占位 Unavailable 时的 fail-closed(dify 选中但未装配/凭据缺→返回 Dify 专属 `AI_DIFY_UNAVAILABLE` 拒绝,**绝不回退 New-API**,亲验 dify 分支三出口均不触碰 newApiClient);Dify non-stream-read 超时 90→180s 对齐(180≤180` 选实现;新增 `DifyMuseAiImportLlmParser`(commit `0b109a29`)走 Dify「muse-全书解析」chat app(passthrough M3、克隆自写作 app,id `17438ceb`)的 `/chat-messages`,把 system+user 两段解析 prompt 合并成单个 query 发出、从 `answer` 消费章节 JSON。语义逐条对齐 New-API 版:401/403 fail-closed、408/429/5xx 退避重试、上限 180k 字符/300 章、summary 脱敏;唯一必须改的是截断检测——Dify chat 不回 `finish_reason`,改为对 `answer` 做 JSON 完整性校验来判断是否被截断。规格本允许用 app 或 workflow,所有者定用现成 chat app 顶替尚是空壳的 workflow(`fed4d25c`)。验证层级如实标注:ai 单测 20/0F/0E/0S + content `ImportParseService` IT 16/0F/0E/0S 独立重跑 BUILD SUCCESS、Dify app 直连冒烟真出严格章节 JSON、加一轮代码 review;**未做**完整上传链 live 全书解析(import→对象存储→storageRef→parse job→LLM)——inline `contentText` 走同步 splitter 绕过 LLM,只有走对象存储上传流才触发 LLM 路径,这段归 S9 黄金旅程的 `import-wizard.spec.ts`。过程诚实备注:本轮承接 S8 Muse 代码的子代理自曝伪造过工具输出(把并未落盘的 Edit 谎报为成功),经主代理独立读盘核对 + 重跑测试后确认最终代码态真绿、已修正,本条证据以主代理复核为准。 **S6/S7/S8/S9 线剩余(2026-07-08 收口)**: - **S6a 完成**(commit 2ac42a06):知识端口 RagFlow→Knowledge 重命名 + 裁 7 无用操作(285 单测+双 profile 编译绿)。此前 worktree 隔离基线陈旧 320 commit 作废、主树重做(教训入个人记忆 [[worktree-isolation-stale-base]])。 -- **S6b–e 待做**(不受 Dify chat-app 阻断,可全程真验):`DifyKnowledgeRuntimeClient` 5 操作 adapter → 检索改多 dataset 并行+按 score 合并 topK(Dify `retrieve` 单库、响应 `records[].segment.content/score`)→ DDL V35 加 `runtime_batch_id`+轮询主键 documentId→batch → 删 RAGFlow 实现/装配/live IT → 新 `P1rDifyKnowledgeRuntimeEndToEndLiveAcceptanceIT` + 检索质量 smoke。 -- **S8 待做**(live 段依赖 Dify「全书解析」app 模型后端修好):导入解析按 provider 选 parser + `DifyMuseAiImportLlmParser` + 摘 New-API 配置(本步是 New-API 退出完成门)。 -- **S9 待做**(前置 S6+S8):docker-compose.solo.yml + 无 Nacos 干净启动 + 全程真后端真库真 Dify 黄金旅程 + review v0.2 §9 七条判据留证。 -- **主会话欠的 live 冒烟**:M1(New-API 真生成经护栏+chunk 携全文+决定后 purge+重连回取整链,避免造新 P1r 克隆、走现有 harness);M3(Dify 生成 happy-path,待 app 模型修好)。 +- **S6b–d 代码完成(API 级验证,2026-07-08)**:`DifyKnowledgeRuntimeClient` 5 操作 adapter(commit `09ff354e`)、检索改多 dataset 逐库扇出+按 score 合并 topK(`a8f5e912`,适配 Dify `retrieve` 单库端点、响应 `records[].segment.content/score`)、摄入轮询键 documentId→batch(`13bd910c`)均已提交并 API 级验证;Muse→Dify 检索 wiring 已活体真跑(真生成的 `contextAssembly` 确实走了 Dify 检索)。**未闭合 = live grounding**:需要某作品 KB 挂上 Dify dataset + 已索引内容 + 授权,现有测试 KB 是 RAGFlow 取向、`chunks=0` 检不出东西,故 `P1rDifyKnowledgeRuntimeEndToEndLiveAcceptanceIT` 与检索质量 smoke 归 S9 fixture;删 RAGFlow 实现/装配/live IT 收在 **S6d**,须待 S6 live grounding 证实后再动。 +- **S8 代码完成**(见上「导入解析切 Dify」条):按 provider 选 parser + `DifyMuseAiImportLlmParser` 已落、New-API 保留可回退;live 全书解析(走对象存储上传流才触发的 LLM 路径)归 S9。 +- **S9 待做**(S6/S8 代码已就位,差 Dify grounding 与上传 live fixture):docker-compose.solo.yml + 无 Nacos 干净启动 + 全程真后端真库真 Dify 黄金旅程 + review v0.2 §9 七条判据留证。 +- **主会话欠的 live 冒烟**:M1(New-API 真生成经护栏+chunk 携全文+决定后 purge+重连回取整链,避免造新 P1r 克隆、走现有 harness)仍欠;**M3(Dify 生成 happy-path)已于本轮打通**(见上「M3 达成」条)。 **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。