zizi
81a8d1377f
docs(设计): 新增专题-08自动化测试方案SoT,蒸馏G1/G4需求缺口
...
- 新增 专题-08-自动化测试方案:四层测试金字塔、确定性/语义分界判据、语义评测方法论(双盲评委/对照实验Gate B/回放)、测试可判定性合同
- 登记归属:00-文档大纲 + 内容映射表
- 蒸馏G1(收紧自动确认):产品-02 §6.4/§9.1 纳入达标自动确认四条件,消除唯一入口矛盾
- 蒸馏G4(运行时叙事门):专题-04 §4.2.1 补三维量表与通过线(设定≥7.0/角色·场景≥6.0)及四步裁决
- 新增 docs/plans 缺口跟踪:登记10项需求缺口与蒸馏状态
2026-07-30 23:25:15 +08:00
zizi
36268bb118
设计: 固化正文智能体卡索引原文回读契约
2026-07-20 18:42:24 +08:00
zizi
2124a79312
docs(design): 补知识效用缺环——新增专题-07 消费契约与质量闭环 + 七册配套拍板
...
第一性原理结论:知识的价值只在被选中并改善产出的那一刻兑现;此前 SoT 钉死了治理
(谁能读什么),缺消费选择(该读哪几条)与输入侧质量(什么算好知识、怎么测)。
- 新增 专题-07 v1(唯一 owner):术语桥(卡↔SoT 载体)、按用途默认消费合同与注入
视图两档、知识质量三性(可命中/可行动/可持续+口径)、回放评测(参考书=标准答案,
三评测线+两道合规闸+知识策略对象与上线门禁)、长线进度三期消费、实验台实证附录、
验收清单 8 条
- 专题-06 v4:拍板双层型判定(craft 1326 条实测无损→不拆,判据不变);新增 §6.4
参照作品面(参考书实体演变=系统侧证据资产,蒸馏成叙事域成长曲线范式才入 Global);
世界域六型登记演变历程元素;读取器 purpose 枚举 parse→extraction
- 架构-02 v11:aiContext 值域升级为布尔或用途集(实验台字段级用途裁剪实证反哺)
- 专题-03 v3 / 专题-04 v2(补 .md 改名+离线评估允许样本第 5 类)/ 后端-05 v11 /
前端-03 v7 / 产品-01·02、前端-02、后端-03 断链修复 / 大纲 v10 / 映射表 v8
- prototypes/ 新增四页签开发者总览
依据:设计文档全库横切取证 + 实验台 9 批实拆实证(活卡 8587、消费端 0 实现、升格
卡向量 0%、p50 实例数 1)。经 codex 与 opus 双独立评审,必修项全部落实。
2026-07-18 00:02:51 +08:00
lili
c1662fa9d3
docs(design): 结构本体补全 23 型 + 检索基座演进方向与 API 边界钉死
...
- 专题-06 v3:补 chapter(章节容器)/scene(场景卡)/narrative_state(叙事状态模具)三型,
20→23、scope 七值全挂靠;段落不独立建模由 scene 承载(Block=场景/小节级既有拍板);
§2.1 检索基座替换合同与演进方向(引擎缝+引擎中立合同,预期纯 Java 自研:PG 向量插件+New-API 嵌入重排);
钉死读取器只依赖 owner api 模块具名端口(服务即 API)与 storage_binding 权力边界(映射非数据通道)
- 章节容器证据链:专题-03 L1 早已预设「章节目标」为续写必需输入而章节表无此字段,扩展字段落此欠账
- 架构-02/后端-04/产品-02B/大纲/映射表:引用去硬编码数字防再漂移;评审稿 v0.3 同步 W1=23 项
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 04:28:09 -07:00
lili
81374bc203
docs(mvp): 记录 1a 闭合后剩余路线 + provider 流式暂缓决策
...
- 剩余三层:1a 残留(S8 导入上传链 live)/1b 单人主线缺口(P0-11..P1-11)/2.0.0 完整版元数据智能体架构(待过审)
- 流式:provider 级 streaming 暂缓不做(2026-07-09 拍板),AI 生成主链继续走非流式 SSE
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 02:45:11 -07:00
lili
b376589d5c
docs(design): 元数据驱动智能体架构定版落 SoT——新增专题-06 + 六分册对齐拍板
...
- 新增专题-06-元数据驱动的智能体架构(v1):agent=f(作品+元数据+知识库) 横切 owner——
双枢中枢/三体关系/20 型 target_type 本体/作品容器与 base 内置机制/拆书与 reference_work/统一创作数据读取器
- 架构-02 v10:§1.2 Canonical 入口增补(管理员确认系统级知识草稿→Global KB 范式);§9 补 domain 逐值语义、override 只增不改
- 架构-03 v13:ADR-022 功能链定义归元引擎(案A 顺代码)、ADR-023 双轨入口增补
- 后端-04 v11:功能链表族订正 muse_meta_function_chain* 归 meta;character_entity→character;muse_meta_field 增 storage_binding
- 架构-01/后端-02/产品-02B:功能链归属行与拆书治理管理面对齐;大纲/映射表注册专题-06
- 落档评审稿 v0.2(过程稿):三拍板+四默认、执行计划 W1-W8、反假绿(生产迁移零 MetaSchema seed)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-09 01:06:38 -07:00
lili
c9dbd51ed1
docs(agents): 蒸馏 S9 部署收口 4 坑入 knowledge gotchas §八
...
sql/muse compose 挂载 / 覆盖台账 JSON 是 SoT 别重生成 / 加 service @Resource 依赖须真跑跨模块 IT / 全新作品 AI 需 muse_tool_grant authz 种子
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 10:26:05 -07:00
lili
1c2d51bfd4
feat(deploy): S9 单人版 compose 从零部署+黄金旅程活体验收(1a 闭合)
...
- docker-compose.solo.yml:muse-server 单体+PG+Redis 一体化编排,固化 sql/muse Flyway 迁移只读挂载(mini-infra 从零真验暴露漏挂致 muse 表全缺、AI worker 每秒报 relation does not exist)
- 2.0.0-单人版部署手册.md:双栈拓扑/凭据清单/从零步骤/回滚恢复多用户/Dify 升级约定
- 进度总账:§9 判据 0–7 全留证(黄金旅程 workId98 七步 PG 核验+compose 从零 36 迁移 121 表)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 10:19:47 -07:00
lili
7a6e46b2fe
fix(test): S9 整分支收口修 S6d 台账漂移+V35 跳号登记+S8 导入向导 IT 上下文
...
- 覆盖台账 p1r-api-coverage.json 与生成器去 S6d 已删 RAGFlow 文件引用,知识域 serviceFiles/testFiles 换 Dify 继任,保 32 market dormant 口径不被重生成摧毁
- ContractFirstGateTest 登记 V35 有意跳号(并行线版本预留,V36/V37 已应用 live 库不可回填)+ stale 守卫
- P1rContentImportWizardCompletedApprovalIT 补 MuseAiProperties @Bean(S8 加 @Resource 依赖后极简上下文缺 bean 致 ApplicationContext 加载失败)
- 独立复跑:local 门 65/0F/0E BUILD SUCCESS;import wizard 真PG IT 2/0F/0E(1 live skip)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 10:19:11 -07:00
lili
302603d9d9
refactor(knowledge): S6d 删 RAGFlow 运行时,Dify 转默认装配
...
S6 Dify grounding 已 live 证成(新 KB→Dify dataset 索引→生成 contextAssembly
chunkCount=1→输出复现 KB-only 专名),RAGFlow 运行时退役。删 HttpRagFlow/
UnavailableRagFlow 两 client + RagFlowKnowledgeRuntimeClientConfiguration 装配
+ 其配置测试 + KnowledgeRuntimeClientTest(整体为 RAGFlow 契约测试)+ RAGFlow
live IT(knowledge 侧 P1rRagFlowLiveAcceptanceIT + muse-server 侧 P1rKnowledge
RuntimeEndToEndLiveAcceptanceIT,§9.3 明示退役;Dify e2e 已活体证成、按 content-
filter 记忆不新造 P1r IT 顶替)。
装配转默认:DifyKnowledgeRuntimeClientConfiguration 主 bean 加 matchIfMissing=true
(provider 未设→Dify);新增 @ConditionalOnMissingBean 兜底 unavailableKnowledge
RuntimeClient(原无通用兜底,provider=ragflow 显式值下主 bean havingValue=dify 不
匹配会致无 bean 启动失败,兜底补齐后落 Unavailable)。RagFlowKnowledgeRedactor 被
Dify 复用保留;ragflow 属性块/muse_knowledge_ragflow_binding 表(遗留命名存 Dify
ID)不动。market-assembled 双排除的 P1rMarketKbForkMaterializationIT 保留(market+
RAGFlow 双休眠,归 market 恢复路径,符合 S3「排除不删」)。
验证:knowledge-server 单测 300/0/0/0 BUILD SUCCESS;knowledge+muse-server 全分支
test-compile BUILD SUCCESS(MVN_EXIT=0);DifyKnowledgeRuntimeClientConfigurationTest
8 全绿验三态(缺省→Dify/ragflow→Unavailable/缺省未配→fail-closed Unavailable)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 09:06:32 -07:00
lili
9057dc8df0
fix(ai): 补修 S8 接口加 providerKey 破坏 muse-server 导入向导 IT 编译
...
S8(0b109a29)给 MuseAiImportLlmParser 接口加 providerKey() 后它不再是函数式
接口,而 P1rContentImportWizardCompletedApprovalIT 的 importLlmParser() 测试 bean
仍以 lambda 提供 stub → muse-server test-compile 断裂。当时 S8 只跑 ai 模块单测
(20/0/0/0)、未编 muse-server 整分支,故漏(整分支视角收口价值)。改 lambda 为匿名
类实现 parse+providerKey;该 IT 只装配单个 parser bean、resolveImportLlmParser 对
size==1 直接返回,providerKey 不参与选择,返回 "stub" 占位。
验证:mvn -pl muse-server -am test-compile BUILD SUCCESS(MVN_EXIT=0)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 09:06:31 -07:00
lili
1c74372a1d
docs(mvp): 回写 S7 M3 生成 live 打通与 S8 导入解析切 Dify 里程碑
...
进度总账 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) <noreply@anthropic.com>
2026-07-08 08:12:11 -07:00
lili
0b109a2961
feat(ai): S8 导入解析切 Dify chat 解析器 + provider 选择
...
MuseAiImportParseService 从单点注入 NewApiMuseAiImportLlmParser 改为按
muse.ai.import.provider(缺省 dify)从 List<MuseAiImportLlmParser> 选择;来源标识
由选中 parser 的 summary.parser 自报(dify_import_llm / new_api_import_llm)。
新增 DifyMuseAiImportLlmParser:走 Dify「muse-全书解析」chat app(passthrough M3、
克隆自写作 app)的 /chat-messages blocking 调用,把镜像 New-API 的 system+user 解析
prompt 合并成一条 query 发出,从 answer 消费章节 JSON。语义逐条对齐 New-API 版:
401/403 fail-closed 不重试、408/429/5xx 退避重试、输入上限 180k、空/超 300 章节、
脱敏 summary、直连绕代理、key 不落库不打印。截断检测差异:Dify chat 无 finish_reason,
改为对 answer 做 JSON 完整性校验(解析失败→AI_IMPORT_LLM_TRUNCATED 不可重试)。
MuseAiProperties.Dify 补 maxAttempts/retryBackoffSeconds;新增 ImportParse.provider。
规格允许 app/workflow;创始人定 chat app 顶替空 workflow 壳 fed4d25c。p1r 配置
MUSE_AI_DIFY_PARSER_APP_ID/API_KEY 指向新 chat app 17438ceb。
验证(独立重跑核验,不采信子代理自报):
- ai 模块单测 20/0/0/0(DifyImportLlmParser 7、ImportParseService provider 选择 11、
NewApi 2)+ content ImportParseService IT 16/0/0/0,MVN_EXIT=0 BUILD SUCCESS
- Dify 解析 app 直连 /v1/chat-messages 冒烟真出严格章节 JSON {"chapters":[...]}
- 代码 review:确认真 chat 契约(/chat-messages、读 answer、无 workflow 残留)
未做:完整上传链 live 全书解析(import→对象存储→storageRef→parse job→LLM)属 S9
黄金旅程/import-wizard.spec.ts 范畴——inline contentText 走同步 splitter 绕 LLM,
LLM 路径需对象存储上传流,非本次 parser 改动引入。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 07:59:26 -07:00
lili
bdc07a4321
fix(ai): muse-server 补 muse.ai.dify.credentials 修 Dify 生成凭据无法绑定
...
单体 muse-server 只加载自身 application.yaml,muse-module-ai-server 的同名
application.yaml(含 muse.ai.dify)被 classpath 遮蔽不生效。enabled/base-url
等标量能靠 MUSE_AI_DIFY_* 环境变量 relaxed-binding,但 credentials 是 List、
无法用扁平环境变量绑定 → 运行时列表为空 → RealDifyMuseAiRuntimeClient.apiKey()
恒返 null → 任何 Dify 生成秒失败于 AI_AGENT_DIFY_CREDENTIAL_REQUIRED。此前 S7d
只有 mock properties 的单测、从未经 muse-server 端到端活体验证,故未暴露。
修法:在 muse-server 自身 application.yaml 的 muse.ai 下补 dify.credentials
列表块(api-key 仍从环境变量注入,禁止明文落库)。
活体验证(muse_slice_live,官方 start-muse-server-infra.sh 重建+仅 p1r 标量 env、
无索引 env 兜底):POST /app-api/muse/ai/tasks(work1 writing.continuation)
→ agent v8(runtimeProvider=dify)→ RealDify → Dify /v1/chat-messages(写作 app
75f105e8, MiniMax-M3)→ generation taskId=117 status=completed 无 error →
suggestion id=107 落库真 M3 续写正文。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 04:50:27 -07:00
lili
13bd910c8f
feat(knowledge): S6 摄入轮询键 documentId→batch(Dify 按 batch 轮询 indexing-status)
...
为 muse_knowledge_processing_task 加 runtime_batch_id 列并落库 Dify 上传返回的索引批次(从 uploadResult.summary 的 batch 键抽取)。poll worker 取 runtimeBatchId 非空优先、否则回退 ragflowDocumentId 作轮询键,RAGFlow 无 batch 路径逐字不变;skip gate 放宽为 documentId 与 batch 都空才跳过。
DDL 采用新迁移 V37 ALTER TABLE ADD COLUMN,非回编 V14 建表语句——沿用 sql/muse append-only 约定(V24/V27/V30/V31 同法),避免破坏已应用库(dev/live)的 Flyway 校验和。
验证:mvn -pl muse-module-knowledge-server -am test 目标两类全绿(PollWorkerTest 9/0/0/0、DocumentServiceTest 17/0/0/0,聚合 Tests run 26 Failures 0 Errors 0 Skipped 0,BUILD SUCCESS)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 03:45:46 -07:00
lili
a8f5e912f5
feat(knowledge): S6c 检索多 dataset 逐库扇出+按相似度合并(Dify 单库端点适配)
...
Dify 的 retrieve 是单 dataset 端点、一次只检索一个库;把 MuseKnowledgeRetrievalApiImpl 从一次
多库调用(RAGFlow 原生多 dataset_ids)改为逐授权库检索:每次 chunk 直接归属本次检索的授权来源
(Dify 单库响应无 dataset_id、无法事后反查),再按相似度降序合并、截断到全局 topK。单库失败降级
跳过并记可追溯日志、全部失败回传代表性失败类。顺序执行(非并行)保留租户 ThreadLocal 上下文,
避免并行池线程丢上下文的隔离风险;内测期单作品 KB 数少延迟可接受,并行留作后续优化。授权双门
/§5.3 合同字段/同库多来源去重语义不变。
测试 18/0/0/0:15 个原测试(含 SPIKE 越权 + uRetrieve)证明单来源行为逐字不变,新增多库合并排序
/单库失败降级/全库失败三例。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 03:12:55 -07:00
lili
09ff354e2f
feat(knowledge): S6b DifyKnowledgeRuntimeClient adapter(5 操作)+ provider 互斥装配
...
S6 第二子步(不改检索/上传/轮询流程、不加 DDL、不删 RAGFlow):新增 DifyKnowledgeRuntimeClient
实现 KnowledgeRuntimeClient 5 操作,HTTP 范式对齐现有 Dify/RagFlow client(JDK HttpClient+直连
ProxySelector+Bearer(dataset-api-key)+RagFlowKnowledgeRedactor 脱敏+可测 send() 缝+fail-closed)。
API 映射以 S1 P1rDifyDatasetsContractLiveIT 为准:createDataset POST /v1/datasets(顶层 id)、
uploadDocuments create-by-file(嵌套 document.id + 顶层 batch)、startParse 降级 no-op(Dify 上传即
索引)、pollDocumentStatuses indexing-status(batch 主键、data 数组/对象两态归一)、retrieveChunks
retrieve(单库,records[].segment.content/score 归一成下游已消费的 data.chunks[].content/similarity)。
装配互斥:新增共享选择器 muse.knowledge.runtime-provider——Dify 仅 =dify 装配,RAGFlow =ragflow
或缺省(matchIfMissing=true)装配,确保单人只装一个 bean(取代非确定的 @ConditionalOnMissingBean
扫描顺序)。**默认保持 RAGFlow、既有部署零变更;激活 Dify 需 S9 solo 配置设 runtime-provider=dify**。
新增 UnavailableKnowledgeRuntimeClient 通用 fail-closed 桩。未摘 RAGFlow(S6d)。
过渡缺口(属 S6c):adapter 单库检索只取首个 datasetId,多 KB fan-out+合并归 S6c 的 RetrievalApiImpl;
poll batch 依赖 S6c 把 worker 轮询主键改喂 batch;归一成 data.chunks[] 形态使 S6c 只需加 fan-out。
验证:knowledge 模块 315 用例全绿(DifyClientTest 22 + ConfigTest 8 + 旧 RAGFlow 未回归),BUILD
SUCCESS;装配 ApplicationContextRunner 6 组场景实证任何组合只装 1 bean。真连冒烟归 S6e。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 01:58:34 -07:00
lili
6c68b26c6f
docs(mvp): 总账收口 S7 全线+S6a+M3/S8 Dify app 阻断+剩余路线图
...
S7d 代码层 b583bd6d、S6a 2ac42a06 记账;标注真环境阻断:Dify 各 app 模型后端未配好(写作透传
/chat-messages 500),所有者须在 Dify 侧修复,M3/S8 live 才过;S6 走 Datasets 不受此阻断。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 01:26:59 -07:00
lili
b583bd6dc6
feat(ai): S7d 生成 provider 切 Dify 的 fail-closed 硬化 + 超时对齐(代码层)
...
分支①第四步代码/配置层:RoutingMuseAiRuntimeClient 补 Dify 装配为占位 Unavailable 时的 fail-closed
——dify 选中但未装配/凭据缺 → 返回 Dify 专属 AI_DIFY_UNAVAILABLE 并拒绝,绝不回退 New-API(此前会
误报 AI_NEW_API_UNAVAILABLE);dify 分支三出口(requiresSourceRefs→REF_INVALID / !difyAvailable→
UNAVAILABLE / 否则 difyClient.execute)均不触碰 newApiClient(亲验)。Dify non-stream-read 超时默认
90→180s 对齐总预算(180≤180<SSE 死线 240);单人 solo-compose.env.example 启用 Dify 块(凭据取自
既有 S1 DIFY 块,未新造);New-API adapter 与配置保留(S8 才摘)。
在用 Agent 的 runtimeProvider 存于 muse_ai_agent_version.config(运行时 DB JSON 列)非静态种子,故真正
把在用 Agent 切 Dify 属 live 数据操作,归 M3 由主会话执行(本提交不含 DB 改动、不切换 live provider,
超时改动在 Dify 未启用前休眠)。
验证:ai 模块 530 用例全绿(新增 fail-closed 不回退 + Dify 完整正文形态 2 例);P1rDifyChatLiveAcceptanceIT
真连 100.64.0.8:18080 验证 wiring/契约/失败映射通过。**M3 live happy-path 阻断**:Dify「muse-写作透传」
app(75f105e8)/chat-messages 返 500(/info 200)= 该 app 模型后端未配好(Dify 侧配置,非 Muse 代码),
代码正确映射 AI_DIFY_PROVIDER_5XX 可重试+fail-closed;待所有者在 Dify 侧修复 app 模型配置后跑 M3。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 01:25:56 -07:00
lili
2ac42a0628
refactor(knowledge): S6a 端口重命名 RagFlow→Knowledge + 裁剪无生产调用操作
...
S6 第一子步(机械、provider 无关):接口 RagFlowKnowledgeRuntimeClient→KnowledgeRuntimeClient
全量重命名(207 引用,裸旧名 PCRE 精确核验 0 残留);裁掉 7 个已核验无生产调用操作
(updateDatasetConfig/listDatasets/listChunks/runGraphRag/traceGraphRag/getKnowledgeGraph/health,
Command/枚举/实现体/单测清零),接口保留 5 操作(建库/上传/触发解析/轮询/检索);审计
recordRagflowCall→recordRuntimeCall、RagflowCallRecordReq→RuntimeCallRecordReq(旧 token 0/新 13)。
REST 端 MuseKnowledgeGraphQueryService.getKnowledgeGraph(从 Muse 自有 PG 读图,同名不同方法)保留未动。
命名债白名单保留原名:表 muse_knowledge_ragflow_call/_binding、两 DO/Mapper、ragflowDatasetId/
DocumentId 列、KNOWLEDGE_RAGFLOW_* 错误码、FailureClass.RAGFLOW_*(S6 删类步再清)。
两个 opt-in live IT(P1rRagFlowLiveAcceptanceIT、server 的 P1rKnowledgeRuntimeEndToEnd...)原本真调了
被裁操作(health/listChunks/runGraphRag/traceGraphRag),做最小手术删被裁调用/断言、保留 5 操作
happy-path 覆盖(这俩 IT 本就在 S6 后续删/重做)。HttpRagFlowKnowledgeRuntimeClient 等实现类名 S6 删类步保留。
验证:knowledge 模块 285 用例全绿(BUILD SUCCESS);muse-server test-compile 默认 + market-assembled
双 profile 均 BUILD SUCCESS(被改 IT 新鲜编译)。此前 worktree 隔离基线陈旧 320 commit 作废、主树重做。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 01:03:52 -07:00
lili
0451549829
docs(mvp): 总账记 S7 分支① M2 达成(S7a/b/c 落地验真)
...
全文通路三步 916d6c87/fcd0623a/43a08624 逐一独立验真;所见即所写经真后端+真 New-API e2e
端到端证实 Canonical===客户端 finalContent。剩 S7d 切 Dify + S6/S8/S9。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 00:55:32 -07:00
lili
43a08624f8
feat(studio): S7c 采纳恒回传完整正文(所见即所写)+ 流健壮性
...
分支①第三步(纯前端,无需改后端):采纳恒以 merge_after_edit + modify_then_merge 语义上送用户在
候选面板审定的完整正文作 finalContent(改没改过都送、原样发),使 Canonical 由客户端回传正文写入,
而非后端存的 60/80 字摘要——修掉「原样采纳(accept_as_is)把摘要写进 Canonical」的潜伏缺陷。
后端契约已亲验:ContentSourceServiceImpl.resolveMergedContent 的 merge_after_edit 分支直接落
finalContent、只校验非空、不要求"必须改过";accept_as_is 才用摘要。
流健壮性:done 仅带 taskId/suggestionId/可选 summary、无完整性信号,故按前端可得信号三分——①流非空
(原子 SSE chunk 已收全)→happy;②流非空但短于 done.summary→疑似断连截断,提示重生成、绝不静默采纳;
③流为空→回源只得脱敏摘要,标 degraded 由候选面板明确警告、不当完整正文静默采纳。
验证:tsc -b / vitest 32 files 121 passed / vite build / eslint 均 EXIT=0;MSW-off e2e
accept-suggestion.spec 真后端48080+真 New-API 3 passed——采纳后 acceptMode=merge_after_edit、
revision 180→181、Canonical content_text===客户端回传 finalContent(所见即所写端到端证实)。
改动严格 8 文件全在 muse-studio。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 00:53:56 -07:00
lili
fcd0623a18
feat(ai): S7b 瞬态全文载体 + SSE chunk 送达 + 决定即清
...
分支①第二步:新增独立瞬态加密表 muse_ai_generated_fulltext(V36:fulltext_content 经
EncryptTypeHandler AES 加密、expires_at TTL 30min、content_hash/length 供脱敏、决定即删),
仿 MuseAiRuntimePayloadStore 范式建 Store(write/read/purge/cleanupExpired)。执行器拿到成功
RuntimeResult 后把 fullOutput 写瞬态 Store(不在终态 finally purge——出向正文须存活到用户决定);
投影在 done 之前发一条非终态 chunk 引用行(payload 只含 {contentRef:taskId,sequenceNo},绝不带
正文,不落 outbox、不受终态唯一索引);SSE chunkData 遇 contentRef 回瞬态 Store 取正文填 content,
缺失(purge/过期)→空串,兼容旧内联行。采纳(merge facade)/放弃(reject 两路)即 purge。
主权红线(四重亲验):完整正文只存于执行线程内存/瞬态加密表/SSE 传输/客户端,永不进 chunk payload
(只放 ref)、永不进 muse_ai_suggestion/muse_content_block 任何长期列;content_snapshot.content 仍
写脱敏摘要(S7a 口径未动);DO toString 排除正文、Store 日志只算 sha256/length。
验证:ai 模块 528 用例全绿(新增 Store 6 + 投影/流/建议/合并各扩展),BUILD SUCCESS(-am 防 stale)。
真 PG 一次真生成端到端(chunk 携全文/决定后 purge/重连回取)并入 M1 harness,本步未造新 live IT(避
内容过滤器)。DDL:V35 由 S6 占,本表 V36,当前 V34→V36 临时空号,S6 落 V35 填平(Flyway 允许)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-08 00:29:29 -07:00
lili
916d6c877f
feat(ai): S7a 捕获 provider 完整正文 + 护栏/审上移到完整正文
...
分支①第一步(provider 无关):RuntimeResult 加仅内存 fullOutput 字段承载 provider 完整正文
(供 S7b 瞬态通路),两个 real client(New-API/Dify chat+workflow)在派生 60/80 字摘要前捕获
完整正文并跑护栏,通过才透出。护栏 guardFullOutput 纯静态 provider 无关:空/超长/凭据痕迹/
疑似截断(≥60 字未以句末标点结束)→失败可重试,不信 provider finishReason(Dify 硬编码常量、
New-API 只记录)。「审」输入从脱敏摘要上移到 result.fullOutput(缺省回退摘要,兼容 shadow/历史)。
主权红线(三层亲验):content_snapshot.content 仍写摘要(resolveContentText,不变);完整正文仅
作 review() 局部变量,findings 落库只含布尔/marker 名/长度、审 ID 指纹用 hashCode+length 不可逆,
无正文明文入库;fullOutput 无任何 set/put/序列化/持久化出口,toString 只打 length。
验证:ai 模块 79 用例全绿(MuseAiCandidateReviewServiceTest 11 / MuseAiRuntimeClientTest 22 /
MuseAiRuntimeProjectionServiceTest 6 / MuseAiTaskServiceTest 40),BUILD SUCCESS。改动严格 7 文件。
真实生成经护栏的活体验证并入 M1(S7b real-PG)。附:DDL 协调 S7b 瞬态表改 V36(S6 batch 占 V35)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 23:59:27 -07:00
lili
ca045e3b13
docs(agent-specs): S7 全文通路材料点裁决落定 + 执行版 v1.0
...
三个材料级点所有者 2026-07-07 裁决全部采纳推荐:①独立加密缓存表 ②采纳恒回传完整正文(所见即所写)
③护栏+合规审上移到完整正文。据此产出执行版 v1.0,拆 S7a(捕获+护栏,provider 无关)→S7b(瞬态载体
+SSE 送达,V35 迁移)→S7c(前端所见即所写)→S7d(切 Dify,依赖 workspace)。总账同步。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 23:25:41 -07:00
lili
2973e8da66
docs(agent-specs): S7 生成主链全文通路(分支①)评审版 v0.2
...
现状经三路测绘实测校正:完整正文只活在 real client success() 里、构造结果前即被截成
60/80 字摘要丢弃(唯一捕获点);SSE 严格只重放已持久化事件、当前只发无正文的 done;
"三审"审的也是摘要;Dify 完成原因硬编码常量、截断护栏无效。
设计=一条"瞬态全文"通路:捕获处对完整正文做护栏→写瞬态加密缓存(复用 MuseAiRuntimePayloadStore
范式,TTL+决定即清)→事件表发 chunk 引用行、SSE 重放回缓存取全文填已声明的 chunk.data.content→
前端 streamContent 已接线零改动→采纳恒回传完整正文(所见即所写)写 Canonical。候选/正文表永不含
完整正文。含 mermaid 数据流 + svg/html 速览 + 现状锚点附录。三个材料级点待所有者裁决。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 23:16:05 -07:00
lili
aadc0aa8ab
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>
2026-07-07 22:55:49 -07:00
lili
5ab58a4ed9
docs(mvp): S5 后端起栈 + MSW-off 创作主线 e2e 打通,S5 验收完成
...
DB owner 口径对齐 + moderation 关停后 muse-server 干净起栈,MSW-off 创作主线全量 e2e
33 passed/0 failed/31 隔离,local 门禁 65/0 无回归。经所有者 2026-07-07 验收,S5 标记完成。
moderation 类全量 boot 守卫归 S9 golden-journey 真起冒烟(切片合成测试挡不住真 yaml 回归,不补假绿)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 22:48:53 -07:00
lili
92b90878ec
fix(solo): 补齐单人版登录栈种子与 OAuth2 scopes 兜底
...
单人版真实登录(admin 后台 / member studio)所需的基座种子与兜底:
- OAuth2TokenServiceImpl.createAccessToken 增加 normalizeScopes:登录链路不显式传 scope,
但 PG token 表 scopes 非空约束 → 无兜底会写入失败;统一兜底到客户端默认授权范围。
- yudao-base-seed 补 admin(admin123, status=0)+ super_admin 角色绑定 + default OAuth2 client
+ member 测试账号 15601691388(admin123);ON CONFLICT DO UPDATE 幂等。
- yudao-base-schema / create_tables 给 system_login_log 补 tenant_id(登录写访问日志需要)。
- muse-slice-sequences-repair 补 system_oauth2_* 与 demo 序列;OAuth2 access/refresh token
复用同一 @KeySequence,按两表 GREATEST 对齐,避免 nextval 撞已存在 id。
验证:OAuth2TokenServiceImplTest 14 tests/0 fail(含新增 testCreateAccessToken_nullScopesUseClientScopes);
种子已灌入 muse_slice_live(admin/member/oauth2 client/user_role/tenant 全就位、口令哈希 = admin123)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 22:41:29 -07:00
lili
9af471289a
fix(solo): 修复 2.0.0 单人版 live 后端启动(DB 口径对齐 + moderation 关停)
...
标准启动默认落陈旧的 muse_local(仅 V0 baseline、缺 yudao 基座、update_updated_at_column()
函数属第三个角色 muse)→ Flyway V1 CREATE OR REPLACE FUNCTION 报 "must be owner"。唯一健康
的 live 库是 root@muse_slice_live(已迁 V34、含基座+登录种子)。将 application-infra.yaml 与
start-muse-server-infra.sh 的默认库/用户改为 muse_slice_live/root(真实值仍由 infra.env 覆盖)。
S4 关停 spring.ai.model.* 时漏了 moderation;OpenAiModerationAutoConfiguration 默认
matchIfMissing=true → 全量 boot 实例化 openAiModerationModel、无 OpenAI key 直接抛
"OpenAI API key must be set" 使单体启动失败。在 monolith 真正加载的 muse-server/application.yaml
与 ai-server/application.yaml 两处补 moderation: none(单人形态输出合规走自研 MuseAiCandidateReviewService)。
workspace.spec 冒烟原缺 token 注入,被 S5 新增的 AuthGuard 拦重定向 /login → 补 test1 token 注入。
external-deps 记录 Dify 实例被游戏/Muse 共用、workspace 须隔离的约束。
验证:muse-server 干净启动(Started in 22.4s、Flyway up-to-date 零 owner error);MSW-off 创作主线
e2e 33 passed/0 failed/31 隔离(候选采纳/导入/导出/知识草稿/图谱/绑定/agent 生命周期/AI 真生成全绿);
run-p1r-verification.sh local 65 tests/0 fail BUILD SUCCESS。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-07 22:41:12 -07:00
zizi
9ebf76cb0c
docs(agent-specs): 同步 2.0.0 S4/S5 计划口径
2026-07-08 12:33:51 +08:00
zizi
6dcabf69fb
feat(solo): 收口治理入口并裁剪 studio 表面
...
完成 2.0.0 S4 的外部 AI、admin、account 与 solo SQL 收口,并推进 S5 studio 市场/handoff/旧编辑器入口裁剪。S5 的前端单测、构建与 route-only e2e 已留证;MSW-off 创作主线 e2e 仍因本地后端活体启动口径待修正,已在总账标为未完成验收。
2026-07-08 11:45:26 +08:00
zizi
c8a88e71b3
feat(muse): detach market assembly for solo mode
2026-07-08 10:16:41 +08:00
zizi
b9663f52d1
test(p1r): prepare S2 market detach gates
2026-07-07 19:02:23 +08:00
zizi
6f2629302f
feat(p1r): add Dify S1 live acceptance
2026-07-07 17:10:40 +08:00
zizi
13b305d4da
fix(p1r): align 2.0.0 S0 local gate counts
2026-07-07 14:28:34 +08:00
zizi
2e45191160
docs(agent-specs): add 2.0.0 solo execution plan
2026-07-07 14:28:04 +08:00
lili
0d4dbe64fd
docs(mvp): 记录 1.0.0 mock 与未完成功能的代码级复核订正
...
Backend Maven CI / backend-local (push) Has been cancelled
新增缺口 P0-11/P0-12(content 剧情规划候选、AI 文风检查两个用户面 facade sole-Unavailable 恒 blocked)、P1-15(AI 4/5 来源 owner 实时回查恒 blocked)、P1-16(New-API 用量归因 provider 桩+死代码)、P1-17(admin 质量策略回滚未接写命令);第 4 节补订正 meta impact(Real 已上位)、导出 FileService(Real 真接)、Dify 运行时 Adapter(真接外部)、admin 前端整体复核为真。证据均为生产代码 file:line。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 10:35:51 -07:00
lili
c2777cc71c
feat(ai): 接入Dify运行时Adapter
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-30 00:57:46 -07:00
lili
0f1ff6e4f2
fix(infra): 修复外部服务代理与RAGFlow检索字段
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 10:28:36 -07:00
lili
acd7f040a5
fix(studio): 补齐用户端登录入口
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 09:29:07 -07:00
lili
9e0c223b19
docs(mvp): 校准总览缺口口径
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 08:30:53 -07:00
lili
0acb249a17
docs(mvp): 校准RC后补状态
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 08:29:08 -07:00
lili
3ead87206a
fix(deploy): 固定mini后端迁移目录
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 08:27:22 -07:00
lili
5acb2503b5
feat(studio): 补齐深面入口
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 08:26:47 -07:00
lili
19ff616463
feat(ai): 补齐质量评估执行器
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 08:26:03 -07:00
lili
a5619a3566
feat(content): 补齐导入导出真链路
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 07:40:10 -07:00
lili
04dc70c900
docs(mvp): 整理产品功能缺口待办清单
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 02:57:44 -07:00
lili
facaca1643
feat(admin): 补齐AI系统配置写链路
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 12:52:37 -07:00
lili
8ae812ce6c
feat(content): 补本文导入初始化正文
...
Backend Maven CI / backend-local (push) Has been cancelled
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 11:54:47 -07:00