docs(handoff): 回写 P2 agent 兑现进度(总账 + 总览 + review 实施状态)

- 进度总账:加 2026-06-22 P2 时间线条目(后端放宽+verify/consume+V27、前端落地组件、
  真后端 e2e 2/2、单测 25/0、ArchUnit 3/0、vitest 97、全量 e2e 50;诚实标注 market→agent
  物化未接、e2e 用 seed fixture 替代、来源侧发起暂不做)
- 总览:handoff 令牌消费端 knowledge(P1)→ +agent(P2)红线闭环已接,剩 content(P3)
- P2 review:加实施状态行( 已按方案 A 实施并真后端验证)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
lili 2026-06-22 13:13:00 -07:00
parent 2a7906c74e
commit 6616bf1022
3 changed files with 3 additions and 1 deletions

View File

@ -3,6 +3,7 @@
> 版本:v0.1(P2 单阶段评审) · 日期:2026-06-22 · 目标读者:架构/安全拍板人 + 实现 agent · 类型:评审版(结论+拍板点+blast radius+验收,不预写代码细节)
> 上游:[handoff 顶层评审](2026-06-22-handoff跨空间统一接入-review.md) · [执行版 §六.3](2026-06-22-handoff跨空间统一接入-execution.md)(明确"P2 须单独评审")
> 依据:本评审全部现状基于真实代码实证(2 路只读调研 agent,file:line 锚点见正文),非 summary 推断。
> **实施状态(2026-06-22)**:✅ 已按方案 A 实施并真后端验证(后端放宽 + verify/consume + V27 迁移、前端 AgentHandoffLanding 落地组件、handoff-agent.spec 真后端 e2e 2/2、MuseAgentSlotServiceTest 25/0、Bc/AiGrant ArchUnit 3/0、vitest 97、全量 e2e 50);详见[进度总账 2026-06-22 P2 条目](../mvp/进度总账.md)。⚠️ market→agent 资产物化未接(e2e 用 seed market agent fixture 替代),列独立后续主线。
---

View File

@ -178,6 +178,7 @@
- ✅ **2026-06-22:A 类第二切片——个人中心 New-API 绑定摘要(commit 7408615)**。02G `GET /account/new-api-binding` 后端就绪(curl code:0、未绑定时 fail-closed 返 bindingStatus=unbound),studio 0 展示(盘点 02G ❌)。接入 `useAccountNewApiBinding` hook + openapi 导出 `NewApiBindingSummary` + PersonalCenter「New-API 绑定」区(bindingStatus 中文徽标 已绑定/未绑定/同步失败/同步中 + 上次同步时间)+ mock handler + vitest 契约 + `account-newapi-binding.spec.ts` 真后端 e2e。**全量 e2e 45→46/0、vitest 80→81、tsc/eslint 绿**。**A 类已交付 2 切片**(市场推荐位 + New-API 摘要),样板稳定可复制;剩余同类候选:02G 余额快照(curl 空列表但就绪)、02F governance-impact 消费者治理、admin MetaSchema 废弃回退(注:admin 无 playwright e2e、验证靠单测 + 真 admin-api)。
- ✅ **2026-06-22:A 类第三切片——资产详情页治理影响(commit ab83735)**。02F `GET /marketplace/assets/{id}/governance-impact` 后端就绪(curl code:0 + 真实 governanceResult:resultType/reason/操作限制 + affectedAuthorizations/suggestedActions),studio 详情页 0 展示(盘点 C14 消费者治理读端缺口)。接入 `useGovernanceImpact` hook + openapi 导出 `GovernanceImpactResult` + MarketAssetDetailPage「治理影响」区(结果类型 下架/召回/吊销/可申诉 + 操作限制 停止获取/安装/绑定/生成 + 建议动作)+ mock handler + vitest 契约 + `market-governance-impact.spec.ts` 真后端 e2e。修 spec 块注释内 `affected*` 后接 `/``*/` 意外闭合(tsc 不覆盖 e2e、playwright esbuild 才暴露)。**全量 e2e 46→47/0、vitest 81→82、tsc/eslint 绿**。**A 类已交付 3 切片**(推荐位 + New-API 摘要 + 治理影响):studio 侧"后端就绪、前端 0 消费"的高价值读端缺口基本摘完,剩余 02G 余额快照(空数据价值低)、admin 侧(无 playwright e2e 验证弱)。**A 类告一段落**。
- ✅ **2026-06-22:handoff 跨空间统一接入 P0 基座 + P1 knowledge 端到端闭环(真后端 e2e 反假绿,4 commit)**。盘点①横切共性缺口"handoff 跨空间安全交接=架构级缺失"(五域仅来源侧只读预检、前端 0 消费 token、红线"不信任客户端 URL 参数"零落地)→按执行版分阶段。**P0 基座**:后端 market-api `MarketHandoffTokenApi`(verify 只读核验 + consume CAS 核销,进程内 Bean、复用 selectByTokenHash/effectiveStatus/updateLifecycleByExpectedStatus + cancel 同款 envelope 幂等;completed 此前无生产写入路径=绿地、出参脱敏不回 token)+ 前端 HandoffStore(Zustand,token 用完即弃)/通用 hooks/落地路由 `/handoff/land/:targetOwner`(红线:解析 ?token→replaceState 清 URL→存 store)。**P1 knowledge**:knowledge-server 依赖 market-api,createKnowledgeBindingPrecheck 的 market_kb 来源在 **precheck 阶段**(token 明文仅此持有、createBinding 的 BindReqVO 无 token——自审修正执行版原"createBinding 调 consume")调 verify+consume,替代"只存 hash 不验真"假安全;前端发起(MarketAssetDetailPage bind-precheck 就绪→createHandoff→跳)+ 落地组件(KnowledgeHandoffLanding 3 步:bind-precheck 拿后端可信 source→kbBindPrecheck 核销 token→createBinding 落库,source 全用后端返回不信客户端)。**真后端 e2e**(handoff-knowledge.spec,48080+真 PG):正路完整兑现闭环 + 负路伪造 token 被 verify 拒,2 passed + 二次幂等(用 work4 避 work1+kb1 installed binding 占 uk;global-setup #12 每轮清)。验证:market 编译+install+BcBoundaryArchTest、knowledge -am 编译+边界、前端 tsc/eslint+vitest 82→93、全量 e2e 47→48(handoff +2;knowledge-disable-restore 全量时序 flaky、单跑 2 passed、预存在共享 fixture 时序与本改动无关:handoff 不碰 KB id=1)。连带 drift 收口:MarketBindPrecheckResult.sourceVersion、CreateHandoffInput.authorizationSummaryId 对齐后端 Long。**剩 P2 agent(最高风险:放宽 agentType 校验单点)+ P3 content(asset_use 从零)。** ⚠️ **范围订正(2026-06-22 P2 调研连带发现,反假绿)**:本条"端到端闭环"准确表述 = **token 安全红线端到端 + 绑定落库**;handoff 另一维度"**market 资产物化**"(asset→目标 owner 可用实体、带 source_market_asset_id 溯源)**P1P3 全缺**——knowledge `MuseKnowledgeBaseDO.sourceMarketAssetId` 字段在却**无人写入**、binding `kb_id=parseLong(sourceId)` 直用预存 kb id(`MuseKnowledgeBindingService:110`)、market install 不建 kb 只落 license 投影(`MarketInstallServiceImpl:63` 注释明示);agent 连该字段都无 + 0 物化代码。**P1 e2e 绿靠 fixture 巧合**(asset1→`kb_id=1` 恰命中预存 kb1)。红线真生效属实,但"market 资产真正变成作品可用 kb/agent"未接,列**独立后续主线**。P2 按用户决策取**最小验证口径(方案 A)**:加字段 + 支持 `agent_type='market'` + seed market agent fixture + 放宽 + verify/consume + e2e,验证放宽红线真生效;install 自动物化后续。
- ✅ **2026-06-22:handoff 跨空间统一接入 P2 agent 兑现侧(最小验证放宽红线,真后端 e2e 反假绿,4 commit)**。承 P0 基座 + P1 knowledge,按用户决策三连(先出 P2 评审版 → market→agent 物化取"独立 market 类型" → P2 范围取方案 A 最小验证)。**后端**:ai-server 依赖 market-api;`AgentSlotPrecheckReqVO` 加 sourceType/handoffToken/sourceId/sourceVersion/authorizationSummaryId、precheck DO 加 sourceOwner/handoffHash、muse_agent 加 source_market_asset_id(V27 迁移,全 nullable 向后兼容);precheck market_agent 来源调 verify(targetOwner=agent)+consume(token 明文仅 precheck 阶段持有、bind 凭 precheckId 不再持 token)、**放宽 requireVisibleActiveSourceAgent 仅对已 verify 的 market handoff 跳过 agentType∈{system,user} 校验**(active + version active 仍校验、保护节点/AI 授权隔离不破),bind 凭 precheck.source_owner 标记同款放宽(bind 无 token、不能重验)。**前端**:AgentHandoffLanding 兑现侧落地组件(agentSlotPrecheck market_agent+token→setPrecheck token 用完即弃→bindAgentSlot 凭 precheckId)+ useAgentHandoff hooks + HandoffLandingPage owner dispatch +agent。**真后端 e2e**(handoff-agent.spec,48080+真 PG+V27 真列):正路 bind-precheck(targetOwner=agent)→createHandoff 签 token→agent precheck 后端 verify+consume+放宽接纳 market 类型 agent→bind 落槽位(slotRevision=2)、负路伪造 token 被 verify 拒(0 写),2 passed。验证:MuseAgentSlotServiceTest 25/0(5 放宽红线单测:接纳已验/拒伪造/拒缺 token/拒非 handoff 的 market 型 agent/bind 凭 source_owner 放宽)+ Bc/AiGrant ArchUnit 3/0、前端 tsc/eslint+vitest 93→97(AgentHandoffLanding 4)、V27 已应用共享 muse_slice_live(flyway "now at version v27",用户拍板应用)、全量 e2e 48→50(handoff-agent +2;唯一 flaky=knowledge-disable-restore 全量时序、单跑 2/2 绿、用 KB id=1 与 handoff 用 work4 无关、非 P2 回归)。⚠️ **诚实范围**(承 P1 物化订正):P2 取最小验证口径——**market→agent 资产物化(install 自动建 agent_type=market 实体 + source_market_asset_id 溯源)未接**,e2e 用 seed market agent fixture(global-setup #13:固定 agent_key + active version + work4 槽位)替代;来源侧发起入口(MarketAssetDetailPage agent 按钮)因 sourceAgentId 依赖物化故暂不做(物化后接入)。放宽红线(只接纳 verify 通过的 market token、伪造/缺 token/非 handoff 的 market 型 agent 全拒)真生效属实。**剩 P3 content(asset_use 从零)+ 资产物化(install 自动物化 kb/agent)独立主线。**
### D. gateway 接线(B4,**配置层已收口;运行态后置**)
- ✅ **配置层收口(2026-06-19)**:`muse-gateway` 已新增 `/admin-api/muse/**``/app-api/muse/** → grayLb://muse-server`,删除当前聚合入口未启用的 bpm/pay/report/mp 死路由,Knife4j 聚合入口改为 `muse-server`。新增 `GatewayRouteConfigurationTest` 机械门禁,断言 Muse 路由存在、停用模块路由不回潮、Knife4j 不展示停用服务;本轮 `mvn -pl muse-gateway test -Dtest=GatewayRouteConfigurationTest` **3/3 绿**

View File

@ -152,7 +152,7 @@
|:---:|---|---|---|
| ✅ 完成 | **AI 候选接受链已接通**:WorkspacePage 挂 AIPanel/CandidatePanel→真 `suggestion-merges`(EditorPage 为废弃演示页,故意不接) | content/studio | 2026-06-14 MVP#1;e2e 2/2 绿;「审」字段后端已补;真实生成依 New-API(scope 外) |
| 🟡 部分 | **知识工作台**:忽略/recheck、实体关系 CRUD、发布可发布性预检均已接(2026-06-20);剩处理状态/失败恢复 UI | knowledge/studio | 仅前端未接 |
| 🟡 部分 | **市场端**:许可详情/收藏、handoff 来源侧预检、**handoff 令牌消费端 knowledge owner token 红线闭环(P1,真后端 e2e;⚠️ market 资产物化维度未接、列独立后续)**已接;剩发布工作流写端、handoff agent/content owner 兑现(P2/P3)、申诉 UI | market/studio | 仅前端未接 |
| 🟡 部分 | **市场端**:许可详情/收藏、handoff 来源侧预检、**handoff 令牌消费端 knowledge(P1)+agent(P2)owner token 红线闭环(真后端 e2e;⚠️ market 资产物化维度未接、列独立后续主线)**已接;剩发布工作流写端、handoff content owner 兑现(P3)、申诉 UI | market/studio | 仅前端未接 |
| 🟡 部分 | **个人中心**:购买/授权/发布记录三件套已接(2026-06-20);剩安全事件确认入口/导出下载/New-API绑定/配额申请 | member/studio | 部分前端未接 + 部分 facade Unavailable |
| 🔴 高 | **meta 影响预览 facade 真实化**:解 publish/activate/rollback/deprecate 运行期阻塞 + 建 facade-api 契约 | meta(+content/knowledge/ai) | 跨 BC 地基不存在(见下) |
| 🟡 中 | **网关运行期转发验证**:Nacos/服务发现接线 + 首跑 | platform | 待服务发现配置 |