lili
37e7a8dc27
fix(market): 修 install 用户可见假绿——isAcquired/isInstalled/canInstall 按真实授权安装态 enrich
三路盘点发现 market install 头号用户可见假绿:install 后端真实已验(P1rMarketLicenseInstallCompletedApprovalIT 批18 绿),但 MarketAssetQueryServiceImpl 把 isAcquired/isInstalled 裸硬编 false(toCard:181-182 列表 + userActions:386-387 详情 + canInstall:383),致 studio MarketBrowse(assetType!=work && isAcquired && !isInstalled)安装按钮在真后端永不渲染,mock 伪造状态位才现身;批17 IT 把 isAcquired=false 断言为正确→假绿固化。
后端 enrich(读模型、未碰 install 写逻辑/授权语义):仿 isFavorite 范式加 isAcquired(active 授权)/isInstalled(installation)/isInstallable(类型集),与 install 写端口 MarketInstallServiceImpl 严格同源(selectActiveByOwnerAndAsset + INSTALLABLE_ASSET_TYPES={agent,knowledge_base}),避免"显示可装但装不了"新假绿;canInstall=listed && isInstallable && acquired && !installed(对齐 studio assetType!=work 门);批量加载(整页 2 次 IN vs 3N)避免放大 isFavorite 既有 N+1;mapper 加 selectActiveByOwnerAndAssetIds/existsByUserAndAsset/selectByUserAndAssetIds;批17 IT 改三态断言+订正裸写注释。
前端 MarketBrowse 补 onError(install/acquire 失败内联可见提示,对齐 AgentCreateForm/SlotBindingPanel,不再静默吞 ApiError);e2e 新增 market-install.spec(MSW-off:purchase 前置→断安装按钮真渲染→install→psql 验,连跑 2 次)+ global-setup #16 market 表复位。
活体真验(muse_slice_live,重启新 jar 10:08):purchase→isAcquired=T/canInstall=T(修前恒 false)→install→isInstalled=T/canInstall=F;独立 psql+GET 复核 asset1/4(owner1)isAcquired/isInstalled=true。批17 IT 5/5 三态绿(首跑遇 .m2 stale jar 假红、mvn install 刷新转真绿)、market 单测 9/9+11/11+7/7、UI e2e 连跑 2 次 passed。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 10:28:33 -07:00
..
2026-06-25 01:24:01 -07:00
2026-06-21 12:55:50 -07:00
2026-06-22 07:37:22 -07:00
2026-06-21 13:19:16 -07:00
2026-06-20 20:36:20 -07:00
2026-06-15 05:20:50 -07:00
2026-06-21 13:31:00 -07:00
2026-06-19 07:35:53 -07:00
2026-06-24 11:19:44 -07:00
2026-06-24 17:59:10 -07:00
2026-06-22 07:02:13 -07:00
2026-06-21 09:01:11 -07:00
2026-06-22 00:32:48 -07:00
2026-06-25 10:28:33 -07:00
2026-06-22 13:09:47 -07:00
2026-06-22 23:48:40 -07:00
2026-06-22 10:31:18 -07:00
2026-06-21 10:42:27 -07:00
2026-06-20 13:53:29 -07:00
2026-06-15 00:41:58 -07:00
2026-06-21 09:42:29 -07:00
2026-06-20 19:59:40 -07:00
2026-06-20 20:13:20 -07:00
2026-06-15 08:34:36 -07:00
2026-06-20 20:48:14 -07:00
2026-06-22 07:29:14 -07:00
2026-06-20 20:21:45 -07:00
2026-06-22 07:49:08 -07:00
2026-06-20 20:31:27 -07:00
2026-06-25 10:28:33 -07:00
2026-06-15 07:08:09 -07:00
2026-06-22 07:29:14 -07:00
2026-06-21 04:50:08 -07:00
2026-06-21 09:11:28 -07:00
2026-06-21 14:08:08 -07:00
2026-06-21 10:20:28 -07:00
2026-06-15 01:29:35 -07:00