290 Commits

Author SHA1 Message Date
lili
99f8fcd2e0 test(e2e): 全量 e2e 9 spec/22 用例本地活体全绿 + binding 种子固化
PG 宿主 100.64.0.8 恢复在线→查出旧 jar(Jun-19 00:59)缺 GET bindings 端点(commit 3a7a72f Jun-19 13:30)致 405→rebuild Jun-20 新 jar(反假绿:不用过时 jar)→起栈 48080(local,infra,清 socks)→playwright MSW-off 真打:22 passed/0 failed/0 skipped/0 flaky(9.1s)。

覆盖:accept-suggestion 正负×2 + account-security-ack + agent-create + knowledge-bindings(06-19 PG 离线阻塞项 unblock) + knowledge-confirm + knowledge-graph + live-read×6 + market-publish×8 + workspace。

种子:核验 4/5 基础数据在,knowledge-bindings 投影固化进 e2e/global-setup.ts #6(可入库、下次自动补,补此前未覆盖项);0 红故无就地修。回写进度总账 §五C + 总览待办(受阻→完成) + spec 注释。附本会话 ce-brainstorm/ce-plan 产出文档。

诚实边界:本地全栈活体(rebuild jar + 真 PG muse_slice_live),非 CI(maven.yml 不跑 e2e/需活体后端+浏览器)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 13:53:29 -07:00
lili
349cd73119 docs(dev-baseline): 交叉引用格式示例占位符去 .md,全仓 0 断链
格式示例 `[文档名](文件名.md)` 的占位符被断链扫描误判为断链;改为 `相对路径`(呼应下一行'引用链接使用相对路径'),语义不变,消除最后 1 条断链。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 10:26:18 -07:00
lili
40d4bdb527 docs(design-docs): 清理对从未创建的 doc/dev/* 的全部引用(消除幽灵权威归属)
断链扫描发现 design-docs 把整套 doc/dev/00..09(路线图/阶段/IA验收门禁/真实现状差距)当 SSOT/门禁权威反复引用约 16 处,但该套文档 git 全历史从未创建 → 读者按图索骥全 404。职责实已被现有文档承担,逐处改指或墓碑标注:路线图/阶段→进度总账;验收门禁→覆盖 JSON+verification 规则;真实现状差距→项目功能与进度总览;产品形态→产品/架构分册;RAGFlow 落地→muse-module-knowledge。

改动:00-文档大纲(SSOT归属/角色导航再读列断链/专题-03描述/职责表/单一归属 共5处 + v6→v7);内容映射表(dev路线图块/产品形态行/个人中心/Sa-Token/IA-0~3门禁/IA gate 共~11处 + v6→v7);架构-03 ADR(参考落地2处 + v9→v10)。

验证:断链扫描 3→1(唯一剩 dev-baseline 历史区格式占位符,无害);design-docs 残留 doc/dev 仅墓碑文字标注,0 可点击断链。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 09:38:12 -07:00
lili
329db944ff docs: 进度口径收敛到机械唯一源——修正三套矛盾数字(147/100→233/233) + 现状基线降级
排查发现进度数字三套互相矛盾:总览/现状基线/主台账历史段=147/86、agent-specs=100/127、module-reality=233/0。核机械真值:覆盖 JSON summary=233/233 completed/0 needs(每 op 带 testFiles 证据 + P1rApiCoverageReportTest 校验 summary 自算防手工拨)。⚠️ JSON generatedAt=2026-05-25 未随内容刷新(手工维护痕迹),已在文档标注以 summary+testFiles 为准。

修正:① 总览(我上轮新建,误抄过时台账)147/233→233/233、各域 full、接口门≠端到端两口径分清、定位为人读封面(权威以台账/JSON为准);② 主台账 头部加机械源口径声明(233/0)+门禁中→满+验收债标已清零;③ 现状基线降级为 2026-06-13 历史快照(顶部时效横幅+性质去SSOT);④ AGENTS序2/module-reality 改引用;⑤ agent-specs/.agent 注记历史数字;⑥ meta-schema review 回指 execution v0.2 已证伪地基(待决策提案);⑦ design-docs/00 加'设计≠进度';⑧ dev-baseline 申明旧 SSOT 自称失效。

确立单一真实源:设计=design-docs;进度=进度总账(叙述)+覆盖JSON(机械);人读=项目功能与进度总览(封面)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 05:32:32 -07:00
lili
0c119d7c6f docs: 归档已完成阶段过程文档至 docs/archive(git mv 保历史)
9 篇工作已完成的过程文档(P1R解锁3篇+agent基建交付+superpowers报告2篇+P1R任务memory+已合并object-storage计划+已折入总览的completion brainstorm)移至 docs/archive/。保留:design-docs(SSOT)、主台账、现状基线、对抗复盘/P0冻结令(知识网根基,被AGENTS/.agents/台账引用)、meta-schema当前2篇、p1r-api-coverage.json(被引数据)、memorys/README。归档非删除,git 可恢复。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 02:50:00 -07:00
lili
73ec83ab20 docs: 新增项目功能与进度总览(人读全局入口) + AGENTS 任务前必读指针
合成自 design-docs 功能规范 + 主台账/现状基线/.agent/git:看板(整体~76%、后端~80%、前端studio~30%、覆盖门147/233) + 模块进度表 + 功能清单×状态(7域~64功能) + 待办表(按优先级+阻塞原因) + 文档地图。AGENTS 任务前必读加序0指针。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 02:50:00 -07:00
lili
3adf0172d2 docs(spec): meta-schema 执行版 v0.2(5-persona 评审修订:地基不存在,证伪 4 前提)
ce-doc-review 5 persona + 自验 grep 证伪 v0.1 依赖的 grounding:① compatibility() 只算 type_changed、移除字段被 draftField!=null 守卫掉、无可见性比对→破坏字段集无生产者(P0,4票);② workSchemaId 死代码+content 无 schemaKey+ContentMetaFacade 无解析器→schema_key 无来源(P0,3票);③ 可见性版本级仅存 JSON 快照;④ contentPayload key≠fieldKey。外加 preview 仅 draft 版(3端点不解阻)、@Primary @Service 去 ConditionalOnMissingBean、preview 陈旧、DTO→VO 映射缺、Export 须 meta-server、VERIFIED_ZERO 须机械化断言。新增 §四.0 地基层 + P0a 阶段,解阻锚定 publish,扩 open items。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 00:33:22 -07:00
lili
60586115e3 docs(spec): meta-schema 用量投影执行版(决策确认全5维度+字段级+全真实) + 评审版决策记录
据 grounding(2026-06-20)对 5 维度定性:Planning 真实字段级消费者(字段用量隐含 contentPayload,补 schema_key 即可,无需新快照表);Work/KnowledgeProjection 实证零 schema→已验证真实0贡献者;AIContext/Export 消费侧零持久化→P3 定性。架构:Meta 算破坏字段集 + 各 BC 贡献者只查本域计数(守 BC 边界),聚合器 all-real 门。含 Flyway 迁移/回填/分阶段/每维度真实 PG IT/回滚。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 00:18:30 -07:00
lili
f84eab84d3 docs(ledger): 同步 bindings live e2e spec 已写 ready,活体受阻于 PG 宿主离线
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 22:49:46 -07:00
lili
5a137f1861 test(studio): bindings 读回 live e2e spec(ready-but-unrun,镜像 graph spec)
muse-studio/e2e/knowledge-bindings.spec.ts:nav /knowledge/1→捕获真实 GET /works/1/knowledge-bindings→断 200/code:0/active 绑定 + 面板渲染(作品已绑定的知识来源/市场知识库/生效中)。playwright --list 确认编译有效可发现(1 test)。

尝试活体运行受阻(诚实,非假绿):远端 PG 宿主 100.64.0.8:5433 离线(不在 tailnet 节点列表)、本机无 PG 兜底,全栈 muse-server 起不来。PG 宿主恢复后按 .agents/knowledge §六 起栈(redis 本机可启、jar 需重建含 GET 端点、muse_slice_live seed work1 绑定)即可跑。后端 218 + studio 50/tsc/build 已绿。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 22:49:46 -07:00
lili
643826a3ea docs(ledger): 同步 bindings FE 读回面板已加,展示链全通(11186b6)
bindings 写→读→端点→FE 读回面板全通(vitest 50/50 + tsc 绿);仅 live playwright e2e 待运行中全栈 app。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 13:44:50 -07:00
lili
11186b638c feat(studio): 知识来源绑定读回面板(useKnowledgeBindings + KnowledgeBindingsPanel)
studio 新增 useKnowledgeBindings(workId) hook 读 GET /works/{workId}/knowledge-bindings、解 bindings 数组(id 维持字符串契约);KnowledgeBindingsPanel 镜像 KnowledgeDraftPanel(work-scoped 只读、空/错不占位、来源类型+状态中文徽标)接入 KnowledgePage。至此 bindings 写→读→端点→FE 读回展示链打通。

测试:契约测试(命中 /app-api/muse/works/{id}/knowledge-bindings + 解析数组)+ 组件测试(渲染绑定来源 + 空态不占位);全 studio vitest 50/50、tsc 干净。组件按 AIPanel 先例导入 React + React.FC/React.createElement 适配 vitest 经典 JSX 转换且满足 noUnusedLocals。

诚实边界:rendered-UI 活体证(playwright MSW-off)需运行中全栈 app(env 受限),本切片未跑 live e2e。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 13:44:41 -07:00
lili
a1231afc23 docs(ledger): 同步 GET bindings 读端点已补,读回后端腿闭环(3a7a72f)
bindings 读回后端腿(写投影→读回→GET 端点)已闭环,剩余仅 FE hook;publish 仍 fail-closed 待外部校验器。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 13:31:05 -07:00
lili
3a7a72fa88 feat(knowledge): 补 GET bindings 读端点(作品已绑来源读回)
AppMuseKnowledgeBindingController 加 GET /muse/works/{workId}/knowledge-bindings → bindingService.listKnowledgeBindings:先 requireWorkOwner 过信任边界防越权读他人作品来源绑定(IDOR),再 selectActiveByWorkId 读回投影读模型,id 转字符串对齐契约(防前端大整数精度丢失),X-API-Version guard 同既有端点。

至此 bindings 读回后端腿(绑定确认写投影→按 work 读回→GET 端点)闭环,仅余 FE hook。新增 AppKnowledgeBindingVO.BindingListRespVO/BindingItemVO。

测试:listKnowledgeBindings happy-path 字段映射 + 越权 fail-closed(requireWorkOwner 抛错则绝不查投影);knowledge-server 整套件 218/218 绿(clean 重编译,反假绿)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 13:30:53 -07:00
lili
cac227223f docs(ledger): 同步 knowledge 投影读回端到端坐实 + unbind 软删修复(1c8da86)
记录:嵌入式 DB 往返证 bind 写→读回/unbind 隐藏/同源他作品存活;并修 @TableLogic 致 unbind 软删空操作的真 bug。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:03:21 -07:00
lili
1c8da86e82 fix(knowledge): unbind 真软删(修 @TableLogic 空操作)+ 投影读回嵌入式 DB 坐实
8aad7a4 的 markDeletedByBindingId 用实体 setDeleted(true) 试图软删,但 deleted 是 @TableLogic 字段,会被 MyBatis-Plus 在普通 update 剥离 → 解绑实际未生效,行仍出现在 selectActiveByWorkId 读回。改用 setSql("deleted = true") 强制写该列(H2/PG 通用)。

反假绿:新增 MuseKnowledgeSourceBindingProjectionRoundTripTest(嵌入式 H2 真往返)端到端坐实 bind 写投影→按 work 读回、unbind 后读回消失、同源绑定到其它作品的投影存活;此 bug 即由该测试挖出(此前仅 mock 写证据无法暴露)。MapperTest 改为断言 setSql 真机制(原断言 update.getDeleted()==TRUE 实为被剥离的空操作)。

附:补齐 knowledge 模块首套嵌入式 DB 测试基建(application-unit-test.yaml + create_tables.sql + clean.sql,logic-delete 对齐 muse-server 生产 true/false)。

验证:RoundTripTest 2/2、knowledge-server 整套件 216/216 绿(clean 重编译,反假绿)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 10:03:09 -07:00
lili
50badf835b docs(ledger): 同步 knowledge bindings 投影写腿已接(8aad7a4)
台账原记“bind 不同步写投影/待投影接线”已过时:bind 确认现同步回填 source binding projection、unbind 按 bindingId 作用域撤销、唯一键补 work_id(V24)。bindings 读回剩余缺口收窄为 GET 端点 + FE。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:34:06 -07:00
lili
8aad7a4b1b fix(knowledge): 绑定确认回填来源投影 + 唯一键补 work_id
绑定确认为 source binding projection 读模型的权威回填点:bind 成功后写投影行;unbind 按 bindingId 作用域撤销,不误伤同源绑定到其它作品的投影。

唯一键补 work_id(V24):同源 KB 可被同一用户绑定到多个作品,旧唯一键缺 work_id 会把合法跨作品复用误判为冲突;改为含 work_id 的 partial unique index(WHERE deleted=FALSE)。

验证:MuseKnowledgeBindingServiceTest + MuseKnowledgeSourceBindingProjectionMapperTest 11/11,knowledge-server 整套件 214/214 绿(clean 重编译,反假绿)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 09:31:56 -07:00
lili
bc63a35e88 fix(knowledge): audit impact preview owners 2026-06-19 08:18:46 -07:00
lili
8c1696c59a fix(knowledge): hide deleted installed bindings 2026-06-19 08:09:46 -07:00
lili
d5f62a16e4 test(ai): guard runtime from tool grant writes 2026-06-19 07:56:49 -07:00
lili
be8b4e835e docs: refresh gateway baseline facts 2026-06-19 07:47:20 -07:00
lili
6217029989 fix(gateway): route muse api through muse server 2026-06-19 07:46:15 -07:00
lili
9d5430b62c test(studio): add live agent create e2e 2026-06-19 07:35:53 -07:00
lili
765bf749f2 docs: close stale ai stream drift todo 2026-06-19 06:23:36 -07:00
lili
bb59f98c16 chore(ai): remove empty contract server module 2026-06-19 04:30:01 -07:00
lili
134d7646c3 docs: consolidate dev baseline rules 2026-06-19 04:26:32 -07:00
lili
eeb548db2c docs: update openapi diff wiring status 2026-06-19 04:20:58 -07:00
lili
c66d2b9b82 ci: wire openapi diff workflow at root 2026-06-19 04:19:35 -07:00
lili
984c6db583 test(p1r): require coverage evidence test files 2026-06-19 02:38:29 -07:00
lili
878acef255 test(infra): 对象存储真实往返集成测试(LocalFileClient,反假绿)(U9 Part1)
FileServiceLocalStorageRoundTripTest:真实 LocalFileClient(临时目录)+真 FileServiceImpl+嵌入式 DB,跑 createFileReturningPath→真实落盘→按 path 字节级回读全链路;内容含 CJK+全字节(0..255)二进制,断言磁盘字节==上传字节、回读字节级一致、未知 path fail-closed(FILE_NOT_EXISTS)。无需 MinIO 即真后端真往返。2 测试绿(亲跑验证)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 01:09:49 -07:00
lili
4ceca21f73 feat(infra): 存储 SDK 异常脱敏 + dev/test 文件配置种子 + RBAC 复核 (U7)
- R4 凭证脱敏(发现真实泄漏):S3/MinIO SdkException 原始 message 内嵌 endpoint/bucket/access key,经 GlobalExceptionHandler 全栈日志 + 落 infra_api_error_log 外泄。FileServiceImpl 在边界 catch SdkException 改抛 ServiceException(FILE_STORAGE_OPERATION_FAIL),只记 errorType、不挂 cause(杜绝 message 经兜底回流)。+2 单测断言假密钥不外泄。
- Provisioning:新增无密钥幂等 LOCAL master FileConfig 种子 sql/dev/muse-file-config-master-seed-postgres.sql(强制走字节代理)+ MinIO env 占位模板。
- RBAC:FileConfigController 全端点 @PreAuthorize('infra:file-config:*') 已满足,无改动。
- FileServiceImplTest 21 绿。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:59:26 -07:00
lili
ba6e5f1745 docs(design): 登记对象存储字节代理交付 + 失败关闭安全姿态 (U8)
- 架构-02(权威):细化 Download Credential/Export Package 不变式——租户/用户命名空间隔离、稳定存储路径字节代理、不签发签名 URL、避免 IDOR。
- 架构-03:新增 ADR-019(稳定路径字节代理 + SSRF 白名单 + 服务端权威 scanStatus 失败关闭 + 账户导出脱敏),更新 §3 结论。
- 后端-03 §6/§9/§12 + 后端-05 §4.9/§4.10:导入预检 SSRF/scanStatus、下载字节代理、账户脱敏的流程与契约姿态,均引用 架构-02/ADR-019,不重复定义。
- 4 文档版本号递增至 2026-06-19。无 V24 迁移(列已齐)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:57:10 -07:00
lili
00dcb2b8d6 feat(member): 真 AccountFileServiceFacade 接通对象存储 + 账户导出脱敏 (U6)
- RealAccountFileServiceFacade @Component @Primary:createExportTask(BC 内按 exportType 组装账户主体数据→R4 脱敏→size guard→createFileForPath,fileRef=稳定 path);downloadExportPackage(getFileBytes 字节代理)。member 拓扑/autoconfig/Unavailable/caller/pom 均未动。
- AccountExportRenderer(KTD4 member 轻渲染):in-BC 读、限 accountUserId;脱敏 standard/strict,未知→STRICT fail-closed,绝不输出原始 PII(mobile/ipAddress);deviceInfo 不导出。
- credentialId=null(凭证由 AccountExportServiceImpl HMAC 自持,避免重复铸造);status=completed 对齐 normalizeCreateStatus。
- 全路径 fail-closed(FileApi 缺/超限/抛错/敏感类型→unavailable),日志仅 ids/errorType。
- 14 facade + 19 caller 回归 + 3 拓扑 测试全绿。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:47:14 -07:00
lili
0a83c05e6a feat(content): docx/epub 导出渲染器(纯 JDK,无新依赖)(U4)
- DocxExportRenderer/EpubExportRenderer @Component implements ExportRenderer,纯 java.util.zip 手写最小 OOXML/EPUB:docx=[Content_Types].xml+_rels/.rels+word/document.xml(段落,Heading1 标题);epub mimetype 首条且 STORED(application/epub+zip)+container.xml+content.opf(EPUB2)+toc.ncx+逐章 XHTML。全文 XML 转义、UTF-8。
- 工厂经 List<ExportRenderer> 注入自动登记,未改工厂。muse-dependencies 未动,离线可构建。
- 跨单元修正 RealContentFileFacadeTest:docx 已注册→available(原'未注册→unavailable'前提失效),保留未知格式串→unavailable 及全部安全断言。
- 44 测试绿(docx7/epub8/factory4/facade25)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:44:21 -07:00
lili
1970431730 feat(content): 导入检视 SSRF 防护 + scanStatus 服务端权威 (U5b)
- inspectImportFile:① uploadUrl 过 SSRF 白名单(https-only/禁 userinfo/路径穿越/字面 IP·元数据·内网/非默认端口/host 字典命中,IDN→ASCII,不解析 DNS 防 TOCTOU,默认空=全拒,复用 MuseKnowledgeMaterializationService 范式);② scanStatus 服务端权威——仓内无扫描链路+import 表无 scan 列→恒 scan_blocked,客户端自报 clean 一律忽略;③ 仅服务端 clean 才 available(当前不可达,留待真扫描接入)。
- 任一阶段受阻→unavailable,调用方据 !available() 拒建任务,不伪造导入。日志仅 ids/errorType。
- RealContentFileFacadeTest +12(共 25 绿);ContentImportParseServiceTest 14 绿无回归。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:35:14 -07:00
lili
a284607762 feat(content): 真 ContentFileFacade 导出/下载接通对象存储 (U5a)
- RealContentFileFacade @Component @Primary:createExportPackage(BC 内组装 canonical→渲染→size guard→createFileForPath,packageRef=稳定 path,凭证 UUID+TTL);downloadExportPackage(getFileBytes 字节代理)。
- KTD2 拓扑:移除 UnavailableContentFileFacade 的 @Service/@ConditionalOnMissingBean(改纯类),MonolithFacadeFallback @Bean 兜底完好。
- 全路径 fail-closed(FileApi 缺/超限/抛错→unavailable,不抛不伪造,@Transactional 回滚);catch 只记 errorType 不记 message(不泄存储细节)。
- RealContentFileFacadeTest 13 绿;muse-server 编译通过。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:25:09 -07:00
lili
18b7c12417 feat(content): 导出渲染器端口 + txt 实现 (U3)
ExportDocument/ExportChapter DTO + ExportFormat(txt/docx/epub MIME/ext) + ExportRenderer 端口 + TxtExportRenderer(纯 JDK,UTF-8) + ExportRendererFactory(EnumMap,未注册格式 fail-fast)。端口可扩展:U4 加 docx/epub 只需 @Component。11 单测绿。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:16:44 -07:00
lili
9eb280615e feat(infra,content): 接通对象存储读腿 — FileApi 按 path 字节取回 RPC + content 接入 infra-api (U1,U2)
- U1: content-server pom 加 muse-module-infra-api 依赖(monolith 内 FileApiImpl bean 满足注入,无需 @EnableFeignClients)。
- U2(P0 修复): FileApi 加 createFileReturningPath(返回稳定 path)+ getFileContentByPath(按 path 字节代理); FileServiceImpl 抽 doUploadFile 复用并新增两法; FileMapper.selectByPath; 无记录 fail-closed 不裸取。私有桶下签名 url 不可作稳定句柄,故下载按 path 键。
- FileServiceImplTest 补 3 单测,19 全绿。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:10:08 -07:00
lili
f014b97c36 docs(plans): R2 对象存储 / FileService plan 与完成度需求
ce-brainstorm→doc-review→plan 流程产物,经两轮多 persona 评审整合(P0 下载 path-keyed 重设计 + 安全控制)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 00:10:08 -07:00
lili
d303279199 Merge feature/agent-dev-infrastructure into dev/1.0.0
Agent 开发基建 + P1r 验收 + CI-green 加固合入 1.0.0(90 commits):全 reactor mvn test/package 全绿(清 6 处潜伏红)、前端 muse-studio tsc/vitest/eslint 全绿、BC 边界门(.dal+.application)+ 契约先行门 + openapi-diff 本地实证。与 dev/1.0.0 的 Account Stage A(2 commits,纯 docs)无冲突合并(merge-tree EXIT=0 预证)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 18:07:51 -07:00
lili
a4659bf3f3 docs(ledger): 补前端 muse-studio 复验绿,完成整分支 CI-green 实证
后端 mvn -B package 已绿(前序 commit)。本 commit 记前端这半:muse-studio tsc -b 0 错误 + vitest run 12 文件/47 用例全过(2026-06-17 复跑,node_modules 直跑 .bin)。本分支 35 个前端改动全在 studio、admin 未动。至此整分支(后端 mvn package + 前端 tsc/vitest)deterministic CI 检查全绿,均本会话实证。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 15:22:51 -07:00
lili
08e8b97c88 docs(ledger): 精确化 GHA 触发残留诊断 + MuseAi skip-gate 反假绿双向实证
GHA 触发管道: 订正"待真实 PR 首跑"→"未接线"。诊断 2026-06-17: workflow 在 muse-cloud/.github/、仓库根无 .github/workflows/、remote 是自建 Gitea(101.200.34.71:2222 非 github.com)→ GHA/Gitea-Actions 只读仓库根故 monorepo 层不触发(真 PR 也不跑);需移 workflow 到仓库根或 muse-cloud 单独成库 + 确认 Gitea Actions 已启。mvn -B package[CI 确切命令]已本地实证全绿,接线属基建决策留人类。

MuseAiEventPublishOutboxMapperTest: 化解"零代码改动"矛盾——本会话已把无 PG 硬 fail 改 assumeTrue skip-gate;双向实证:有 PG(source infra.env + -DargLine 清 SOCKS 代理配方)→5/0/0/0 真跑 PASS、无 PG→skip 非 fail 不拖红 CI。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 15:14:30 -07:00
lili
8963383233 test(ci-green): 清全 reactor 4 处潜伏陈旧测试,mvn test 史上首次全绿
CI 从未在本特性分支跑过(maven.yml 仅 push/PR-to-main 触发),积累潜伏红。以 mvn -pl muse-server -am test -fae 全 reactor 逐模块解锁排查(上游 fail-fast 会 SKIP 下游),本提交清 4 处(另 2 处 market PublishRecordItem/coverage 台账已随前序 commit):

- knowledge/ai Content*WorkOwnerFacadeTest: 陈旧断言 @ConditionalOnBean(2026-06-14 单体修复已去除、改 @Primary 总注册压兜底)
- ai MuseAiEventPublishOutboxMapperTest: 真 PG 用例无 PG 时硬 fail→改 assumeTrue skip(与 P1r external-acceptance env 缺失即 skip 约定一致、honest 非假绿;有 PG 仍真跑保真)
- muse-server P1rKnowledgeMigrationSqlTest: 元测试钉死 TARGET_VERSION="14"→版本无关化(被验收 IT 已按 4d46d7a 动态自适应,元测试不应自犯硬编码版本病)

验收:mvn -pl muse-server -am test -fae 全 reactor BUILD SUCCESS、0 失败/错误、所有模块 SUCCESS(真 PG 类无 PG 时 skip)。教训:跨模块重构后须跑 -fae 全量,勿只跑改动模块。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 15:01:41 -07:00
lili
ffdbf5faa0 fix(coverage): 修台账陈旧文件引用(facade 移 member-api 后 33 op serviceFiles 失效)
承 4e9923c(MarketAccountProjectionFacade 从 member-server 移到 member-api):
coverage 台账 33 个 account op 的 serviceFiles 仍指向旧 member-server 路径→
P1rApiCoverageReportTest.should_back_completed_operations_with_existing_source_files
会红(引用文件不存在)。该门此前未随 facade 移动一并跑到,本提交补正。

- 33 处 serviceFiles 路径 member-server/application/account/facade →
  member-api/api/account(文件实际所在,与移动后一致)
- 验收:P1rApiCoverageReportTest 7/0 绿;全台账扫描 0 缺失文件引用
- 反思:facade 跨模块移动应同步台账文件引用,且验证套件须含 P1rApiCoverageReportTest

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 14:38:57 -07:00
lili
d6fc1994e6 docs(meta): meta-schema 用量投影评审版设计(Pull + 按 BC 拆贡献者端口,待确认)
承进度总账 §五A(MetaImpactFacade 置后判定)。基于本会话只读 grounding 调查
(有出处)产出评审版设计,供人类做架构决策——本提交不实现任何代码。

核心结论:
- 根因证实:消费方未持久化 schema 用量(仅 Content planning 存 schema_version、
  无 schema_key;Knowledge/AI 不存)→ MetaImpactFacade 只能诚实 fail-closed
- 架构订正:现 MetaImpactFacade 单接口返 5 维度=单实现者须懂 5 BC 数据、违
  BcBoundaryArchTest 边界门;须拆为 meta-api 定义贡献者端口、各 owner BC 提供适配器
- 推荐 Pull(按需查询贡献者)而非 Push(事件投影):impact preview 低频 admin +
  gate destructive 治理动作、要准确,Pull 无投影漂移/回填/一致性窗口
- 分阶段:P0 端口就位→P1 Content 真实化→P2+ 其余维度;未做维度诚实 unknown 不伪造
- 5 个 open items 待人类定夺(尤:Knowledge/AI 是否真消费 schema、fail-closed 粒度)

台账 §五A 注册指针。待确认方向后再写主 spec + 执行版(数据契约/迁移/IT 验收)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 14:33:15 -07:00
lili
883e6785d2 docs(knowledge): 记 Maven 增量编译陈旧坑(验证门禁反向红时致假绿)
本会话验证 .application 边界门时实证:仅改 ArchUnit 谓词逻辑后重跑,.class
时间戳更新但方法体未真正重编译→反向"应红"测试假绿(跑的旧字节码)。
沉淀可靠复跑配方(rm maven-status / -Dmaven.compiler.useIncrementalCompilation=false)
入 knowledge §三,供后续门禁自检避免"反假绿本身假绿"。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 14:26:39 -07:00
lili
c219d7e205 test(bc): 跨域 .application 边界门(BcBoundaryArchTest 平行 .dal 规则)
承 bc-boundaries §四遗留 + MarketAccountProjectionFacade 收口(facade 端口统一上移 -api)。

- BcBoundaryArchTest 新增 no_business_bc_may_depend_on_another_bc_application
  (平行既有 .dal 规则、共用 BUSINESS_BCS / KNOWN_VIOLATION_EXEMPTIONS):
  禁任一业务 BC 依赖他域 .application(service / facade 实现);.application 端口
  已无合规跨域通道(均在 -api),故直接禁止、无需为 facade 留例外
- 验收:BcBoundaryArchTest 2/0F(.dal + .application 均绿,ArchUnit 字节码级);
  全仓扫描跨 BC .application import = 0
- 反假绿反向证:同款检测逻辑临时指向 .api(已知有跨 BC 引用)→ 找到 238 例违例,
  证明检测机制非空转、绿是因真无跨域耦合(期间踩 Maven 增量编译陈旧坑:仅改谓词
  不重编译致假绿,须 rm maven-status 或 -Dmaven.compiler.useIncrementalCompilation=false)
- 同步 bc-boundaries §二/§四 + 台账 §一 TODO

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 14:22:30 -07:00
lili
4e9923ce68 refactor(market): pom 坐标收口 market→member-api(facade 移入 member-api)+ tenant 依赖诚实化
承 bc-boundaries §三遗留(更深一层 BC 收口)。market-server pom 此前依赖
muse-module-member-server(可见 member 全部 internal),根因是 market 唯一引用的
member-server 类型 MarketAccountProjectionFacade(单方法读校验端口、无 DTO)。

- 接口 MarketAccountProjectionFacade 从 member-server application.account.facade
  移到 member-api api.account(对称写端口 MuseAccountRecordProjectionApi:member 定义端口、
  market 提供适配器 MarketAccountProjectionProvider、member-alone 回落 Unavailable*,
  符合 bc-boundaries §一"本域定义端口、他域提供适配器")
- market-server pom: muse-module-member-server → muse-module-member-api
- market-server 直接声明 muse-spring-boot-starter-biz-tenant(此前经 member-server 传递,
  收口暴露的隐性传递耦合 → 依赖诚实化)
- 顺带修预存潜伏 test 编译破损:AppMuseMarketPublishControllerTest 的 9 参
  PublishRecordItem 构造(record 自 commit a00c758 加 marketAssetId/appealStatus 变 10 参、
  test 未同步;因 CI 从未在本特性分支运行而潜伏)→补 marketAssetId=null

验收:member-api/member-server/market-server scoped reactor test-compile BUILD SUCCESS;
AccountMarketRecordServiceTest 8/0、MarketAccountProjectionFacadeConfigurationTest 3/0、
MarketAccountProjectionProviderTest 5/0、AppMuseMarketPublishControllerTest 10/0;
BcBoundaryArchTest 1/0(0 Architecture Violation)。同步 bc-boundaries §三 + 台账 §一 TODO。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 14:08:19 -07:00
lili
053caf192f test(contract): openapi-diff 破坏性变更门禁本地实证 + 镜像钉 v1.19.1 + 复现脚本
- go install 同款 oasdiff v1.19.1 验证 openapi-diff.yml 检测逻辑+逐域循环聚合:
  对全部 7 域真实契约 5/5——无变更/新增可选参数/新增端点→放行;
  参数变必填(request-parameter-became-required)/删端点(api-path-removed-without-deprecation)→拦截
- workflow 镜像 tufin/oasdiff 钉 v1.19.1(机械门禁去 :latest 漂移)
- 新增可复现脚本 muse-cloud/scripts/verify-openapi-diff.sh(自举 oasdiff+临时 venv,冷启动 5/5 绿)
- 同步台账 §一②/TODO、contract-first §四(去内联 YAML 双源、指向 workflow SSOT)、knowledge §七
- 残留:GHA 触发管道(PR paths 触发/base.sha worktree/docker 拉取)待真实 PR 首跑

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-17 13:50:15 -07:00