lili
|
4bd292f846
|
feat(meta): P0b meta-api 用量贡献者端口 + RealMetaImpactFacade 聚合器(替换 Unavailable)
meta-api 新增 4 端口契约:MetaImpactDimension(5维度)/MetaSchemaImpactProbe(草稿+三破坏集)/MetaSchemaDimensionImpact(REAL_COUNT|VERIFIED_ZERO,无 unknown 态)/MetaSchemaUsageContributor(进程内 @Service Bean,各 BC 实现)。
RealMetaImpactFacade(@Primary @Service)替换 UnavailableMetaImpactFacade:破坏判定(G1)与实例计数(各域贡献者)分离——调 G1 组 probe、fan-out 各域、all-real 门(5维度齐全+全非null realityKind;缺维度/重复维度/null 均 fail-closed)、DTO→既有 VO 映射(口径对齐既有 PreviewServiceTest)。退役 Unavailable @Service,单体内仅一个 MetaImpactFacade Bean。
当前 P1/P2/P3 贡献者未接入→注入空 List→缺5维度 fail-closed,等价现状(preview 不放行),待贡献者接入自然真实化(渐进替换、平滑可退)。
验证:单元 14/14(聚合器 5 + 回归 PreviewServiceTest 9/9 mock 不破)。单体启动装配验证进行中。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 23:57:32 -07:00 |
|
lili
|
a1600d28ce
|
feat(meta): G1 破坏字段集生产者(移除+类型变更+可见性diff) + 单测[P0a]
meta-schema 用量投影 P0a 地基第一块。补齐 v0.1 误称已存在、实则缺失的破坏集计算:现有 compatibility() 仅算 type_changed 且 draftField!=null 守卫使移除字段不产破坏;字段级可见性只在 policySnapshot JSON 不在列。
MetaSchemaBreakingFieldSetProducer(纯逻辑、无 DB 依赖、可单测)产出三类破坏集:removedFieldKeys(active−draft,补齐漏算)、typeChangedFieldKeys、visibilityChangedFieldKeys(解析两版 policySnapshot 逐维度 diff,5 维度与 MetaVisibilityPolicyDO 口径对齐)。fail-safe:可见性任一维度变化即报、移除字段不重复计入可见性。
验证:单测 5/5(三类各产非空集 + 无破坏空集 + 移除不双计)。真实 PG IT 待 P0b 聚合器接入后(producer 输入由聚合器查 DB 提供)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 23:45:12 -07:00 |
|
lili
|
6389d463f3
|
docs(meta): 固化 meta-schema 用量投影 4 项决策(M全量/D1 work绑定/D2 快照表/D3 全4端点)
人类 2026-06-20 第二轮拍板:坚持全量;D1 schema_key 来源=激活 WorkDO.workSchemaId 绑定(→MetaSchemaDO.id + planning schemaVersion,历史 no-source 排除);D2=补每实例快照表;D3=扩非 draft preview 解阻全 4 治理端点。覆盖 execution v0.2 原推荐,写回决策基线 + §九 决议,为分阶段实现对齐。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 23:38:27 -07:00 |
|
lili
|
784c24e759
|
feat(ai): 补 Security Tool Grant 本地策略审批 facade(打通工具授权链) + 单测
缺口:SecurityToolGrantApprovalFacade 仅 Unavailable 兜底(恒拒 AI_TOOL_GRANT_NOT_APPROVED)→ admin 登记 Tool Grant 必败 → runtime 永查不到已批准 grant 投影(闭环陷阱:runtime 侧 ProjectionSecurityRuntimePermissionFacade 已就绪+测试,但唯一写投影入口被堵死)。
新增 LocalSecurityToolGrantApprovalFacade(@Primary 压过 Unavailable):以 Security owner 身份做策略式合规审批——校验 scope/egress 取值合法(取值集与 runtime 侧对齐,防越界 scope 落库)即批准、否则驳回。
诚实标注:approvedBy=security-policy-local、approvalId 带 security:local: 前缀(经 grant.action 透传 runtime envelope),明示单体内本地策略审批而非外部 Security 人工审批,绝不伪造外部批准;与 admin RBAC 门禁(muse:ai:tool-grant:adjust)叠加。刻意不做:grant/runtime 物理分包(独立 P2)、外部 Security RPC(P1R-4 推迟)。
验证:facade 单测 7/7(approved+越界/空refs/非法refType/开放出网无目标 驳回 + @Primary 装配选主断言);回归 service 6/6、runtime 15/15、controller 注解 2/2 全绿(共30);重建 muse-server jar 单体启动成功(20.4s,无 NoUniqueBeanDefinition/BeanCreationException)。admin curl 端到端被 RBAC 拦 403(鉴权层,facade 之前,预期安全边界)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 22:53:05 -07:00 |
|
lili
|
cfb7eccd0c
|
docs(进度): 同步 7 项 studio UI 缺口补全(知识动作/图谱CRUD/发布预检·市场许可/handoff预检·个人中心记录)
本轮自主补全 7 项真实 studio UI 缺口(均 UI+hook+vitest+e2e 真后端验证):知识(草稿忽略/recheck、图谱实体编辑/新建关系、发布可发布性预检诚实 blocked)、市场(资产许可详情/收藏、绑定到作品授权预检)、个人中心(发布记录补齐三件套)。
e2e 22→30 用例本地活体全绿;总览据实更新各模块前端状态,待办由「高/0 UI」收敛为「部分完成」并列明剩余缺口。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 20:50:42 -07:00 |
|
lili
|
f760ee6043
|
feat(knowledge): studio 知识库发布到市场可发布性预检(诚实呈现受阻)+ e2e
P1 真缺口补全(7/7,收官):知识库工作台自建库新增「发布」入口——源侧 publish-prechecks 预检。useKBPublishReadiness→POST /knowledge-bases/{kbId}/publish-prechecks(commandId+version);KnowledgePublishModal 打开即预检,呈现 blocked+受阻原因+权利/隐私/处理三态;KnowledgePage 自建 KB 卡片加「发布」按钮。
诚实处理:平台外部权利隐私校验器未配置(EXTERNAL_RIGHTS_PRIVACY_VALIDATOR_NOT_CONFIGURED)→ precheck 恒 blocked,UI 如实呈现「暂不可发布」+受阻原因,不伪造可发布、不提供伪造确认入口。
顺带修真后端兼容 bug:normalizeKnowledgeBase/normalizeInstalledKnowledgeBase 的 kbId 未强转字符串,真后端数字 id 被 isKnowledgeBaseSummary 守卫全部过滤→KB 列表空(此前仅 mock 测过未暴露);改 String() 强转(对字符串幂等,不破坏 mock)。
验证:vitest knowledge 13/13(加 publish-precheck 契约)、tsc 0 错;新增 e2e knowledge-publish-precheck.spec.ts 真后端绿(发布→预检 200+blocked:true+「暂不可发布」),全量 30/30 无回归。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 20:48:14 -07:00 |
|
lili
|
3dff0e1735
|
feat(account): studio 个人中心补齐市场记录三件套之三「我的发布」+ e2e
P3 真缺口补全(6/7):PersonalCenter 此前只有购买记录+授权记录,缺发布记录(账户台账视角)——补齐三件套对称。useAccountPublishRecords→GET /account/publish-records(AppPublishRecordRespVO:reviewStatus/marketStatus/blockingReason);PersonalCenter 加「我的发布」区。
查重结论:不与 market 模块 useMyPublishRecords 重复——后者是发布工作流操作台(草稿/提交/申诉,my-publish-records),本接口是账户中心历史台账(account/publish-records,member 模块,与购买/授权并列)。
验证:vitest account 3/3(加 publish-records URL+reviewStatus 契约)、tsc 0 错;新增 e2e account-publish-records.spec.ts 真后端绿(GET 200+「我的发布」渲染),全量 29/29 无回归。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 20:36:20 -07:00 |
|
lili
|
9c84c05e62
|
feat(market): studio 资产详情页加「绑定到作品授权预检」(来源侧 handoff 预检) + e2e
P2 真缺口补全(5/7):资产详情页新增「绑定到作品」区——获取授权 + 来源侧 bind-precheck(展示授权摘要/兼容性/就绪态/绑定策略)。useBindPrecheck→POST /assets/{id}/bind-precheck(targetOwner=knowledge/targetAction=bind/targetWorkId,commandId 走 body);详情页接 useAcquireMarketAsset 获取授权 + 预检结果回显。
诚实边界:只做来源侧只读预检(返回授权摘要,不产生绑定事实);完整交接 token 由知识域消费(Market 不消费 token),消费端 UI 不在本切片——故不做 create handoff token(避免一侧设计)。
反假绿:probe 真后端确认链路——bind-precheck 需先 acquire(否则 1044000006 授权不存在);asset 须 listed(asset 2 not_listed→1044000004);agent 资产 targetOwner=knowledge/action=bind 通(ai/install 报 1044000021 模板不支持)。
验证:vitest market 4/4(加 bind-precheck URL+body 契约)、tsc 0 错;新增 e2e market-handoff-precheck.spec.ts 真后端绿(acquire→预检→handoffReady:true),全量 28/28 无回归。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 20:31:27 -07:00 |
|
lili
|
7a16d19211
|
feat(market): studio 资产许可详情页(详情+许可条款+收藏)接通真后端 + e2e
P2 真缺口补全(4/7):列表页仅 licenseSummary 单行,新增资产详情页呈现完整许可——路由 /market/assets/:assetId + MarketAssetDetailPage;useMarketAssetDetail→GET /marketplace/assets/{id}(licenseInfo:类型/价格/有效期/允许·禁止用途);useFavoriteAsset→POST favorite;MarketBrowse 资产名改为详情 Link 入口。
反假绿:favorite 首跑返 1044000001(MARKET_COMMAND_ID_REQUIRED)——查出 favorite 的 commandId 走 X-Command-Id 请求头(market 端点契约,异于 acquire/install 的 body commandId),改用底层 request 注入该头修复。
验证:vitest 53/53(market contract 加 detail/favorite URL)、tsc 0 错;新增 e2e market-asset-detail.spec.ts 真后端绿(列表→详情→许可渲染→收藏 POST code:0),全量 27/27 无回归。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 20:21:45 -07:00 |
|
lili
|
c119b90919
|
feat(knowledge): studio 图谱实体编辑 + 新建关系接通真后端 + e2e
P1 真缺口补全(3/7,价值最高):KnowledgeGraphPanel 从只读→可维护正式轨——useUpdateEntity→PUT /entities/{id}(编辑实体名,经后端 normalizedName 规范化)、useCreateRelation→POST /entities/{id}/relations(源→目标 + relationType);均带 commandId,graph node.id=实体 id 直接复用。UI:每实体 inline 编辑 + 底部源/目标/类型新建关系表单。
验证:vitest 52/52(contract 加 PUT/POST URL+body+targetEntityId 转 number)、tsc 0 错;新增 e2e knowledge-entity-crud.spec.ts 2 例真后端绿(编辑名回显规范化值、建关系回显新边),全量 26/26 无回归。反假绿:编辑回显失败暴露后端 normalizedName 去连字符规范化,e2e 适配真实规范化用稳定值断言、非掩盖。种子:global-setup #2c work2 三实体(与 graph 的 work1 隔离、按 description marker 复位)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 20:13:20 -07:00 |
|
lili
|
e5ee1fdb58
|
feat(knowledge): studio 草稿「忽略/重新校验」接通真后端 + e2e
P1 真缺口补全(2/7):KnowledgeDraftPanel 在「确认入库」旁加「重新校验」「忽略」两动作,接已就绪后端端点——useIgnoreKnowledgeDraft→POST /knowledge-drafts/{id}/ignore(审而不入,草稿转 ignored 移出)、useRecheckKnowledgeDraft→POST /knowledge-drafts/{id}/recheck(来源重验异步任务,草稿留 pending);均带 commandId 幂等键,照 useConfirmKnowledgeDraft 模式。
验证:vitest 51/51(contract test 加 ignore/recheck URL+commandId 断言)、tsc 0 错;新增 e2e knowledge-draft-actions.spec.ts 2 例真后端绿(recheck→queued、ignore→ignored+移出),全量 e2e 24/24 无回归。种子:global-setup #2b 固化 work2 下 recheck-e2e/ignore-e2e 两草稿(与 confirm 的 work1 隔离、各用独立草稿避免 recheck 改态影响 ignore)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 19:59:40 -07:00 |
|
lili
|
3a0cb1d73a
|
docs(进度): 纠正总览 5 处 AI 候选链过时记录(P0 已完成)
核查确证 P0(AI 候选采纳链 UI)已于 2026-06-14 MVP#1 完成:WorkspacePage 五环节(生成→SSE→Diff→采纳→回显)真接通(useAcceptSuggestion→真 suggestion-merges)、e2e accept-suggestion 2/2 绿、后端「审」字段 MuseAiCandidateReviewService+setSourceStatus(active) 同日已补。
总览原 5 处(line 15/20/23/74/151)仍记「AI 候选链断/studio 从不调」,与进度总账 line 160「✅ AI 候选采纳 rendered UI 活体证」自相矛盾→纠正为 ✅,两台账一致。EditorPage 为废弃演示页(故意不接,非缺口);真实 AI 生成依 New-API 属 scope 外。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
2026-06-20 19:39:23 -07:00 |
|
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 |
|