7 Commits

Author SHA1 Message Date
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
lili
90daa3088b feat(market): 我的发布记录回显 appealStatus(生产者飞轮端到端收口)
my-publish-records 经 MuseMarketAppealMapper.selectLatestByAssetIdAndUser +
resolveAppealStatus 回填该物化资产被当前发布者发起的最新申诉态到记录 appealStatus
(无物化资产/无申诉则 null;marketAssetId 与 appealStatus 两路共用各只查一次)。
前端 MarketPublish 发布记录副文本以中文徽标渲染「申诉:<待处理/审核中/已关闭…>」。

活体证(反假绿,MSW off 直连重建后单体 48080):
- market-publish.spec.ts 第 8 例 chromium 绿(recId=5/marketAssetId=2 回显 appealStatus=closed→「申诉:已关闭」)。
- 后端 MarketPublishServiceTest 14/14 回归通过(appealMapper 注入无 NPE);前端 tsc 干净 + vitest 47/47 + market-publish 8/8。

至此市场生产者飞轮端到端完整:发布(草稿→检查→提交)→上架状态可视化→
申诉(提交/补充材料/撤回)全生命周期 + 申诉态回显。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 07:08:09 -07:00
lili
ce6bbd8625 feat(market): 申诉补充材料/撤回 UI——补 app-api 我的申诉列表端点
同类 gap:生产者本无「自己申诉」的 app-api 列表端点(只有 admin 列表),
故 supplement/withdraw 无从取 appealId+状态。

后端(muse-module-market):新增 GET /marketplace/appeals(appListMyAppeals +
MuseMarketAppealMapper.selectListByUser + MarketMyAppealItemRespVO),
返回当前发布者全部申诉,并派生 canSupplement(supplementing 态)/canWithdraw(非终态)。

前端(muse-studio):MarketPublish「我的申诉」区列申诉 + 中文状态徽标;
- canWithdraw 放开「撤回」→ useWithdrawAppeal → POST .../withdraw(expectedStatus 乐观锁)→ closed;
- canSupplement 放开「补充材料」→ useSupplementAppeal → POST .../supplements(privacyConfirmed)→ reviewing。

活体证(反假绿,MSW off 直连重建后单体 48080):
- market-publish.spec.ts 第 6/7 例 chromium 绿(撤回→已撤回、补充→材料已补充)。
- DB 证:withdraw→muse_market_appeal status=closed;supplement→muse_market_appeal_material 追加行(e2e 点击产 material#2)。
- 后端 MarketAppealServiceTest 15/15 + AppMuseMarketAppealControllerTest 6/6 回归通过;前端 tsc 干净 + vitest 47/47 + market-publish 7/7。
- 种子 /tmp/SetAppealSup.java(置 supplementing;提交后→reviewing 故每轮重置)。

仍 :发布记录上 appealStatus 回显(my-publish-records 未 join 申诉表)。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 06:53:55 -07:00
lili
a00c7581c9 feat(market): 申诉(appeal)写路 UI 打通——后端暴露物化 assetId 解 gap
根因:my-publish-records 的 assetId 是 publish-record id(草稿/申请占位),
非 submitAppeal.requireAsset 所需的物化 muse_market_asset.id(资产仅在 admin
审核通过 markListed 时物化),生产者侧 UI 取不到正确 assetId。

后端最小契约改动(muse-module-market):
- PublishRecordItem / MarketPublishRecordItemRespVO 加 marketAssetId 字段;
- MarketPublishServiceImpl.resolveMarketAssetId:request.asset_id 命中真实
  muse_market_asset 且归属当前发布者才返回其 id,否则 null(fail-closed,不放开入口)。

前端(muse-studio):
- useSubmitAppeal hook(POST /marketplace/appeals,新 commandId 幂等);
- MarketPublish「我的发布记录」:仅 marketAssetId 非空 + 状态可申诉
  (rejected/compliance_blocked→review_rejection、delisted→delist、recalled→recall)
  的记录放开「发起申诉」→ 面板填理由 → 提交 → 申诉已提交(pending)。

活体证(反假绿,MSW off 直连重建后单体 48080):
- market-publish.spec.ts 第 5 例 chromium 绿(点发起申诉→填→提交→pending)。
- DB 证:muse_market_appeal 追加行 status=pending、commandId 为前端 UUID(e2e 点击产 appealId=3)。
- curl 正负路:自有已驳回→appealId/pending;他人资产→1044000024 无权访问;不存在→1044000003 资产不存在。
- 后端 MarketPublishServiceTest 14/14 回归通过;前端 tsc 干净 + vitest 47/47 + market-publish 5/5。
- 种子 /tmp/SeedAppeal.java(asset(pub=1)+rejected request,asset_id=物化资产)。

仍 :补充材料(supplements)/撤回(withdraw)申诉 UI、记录上 appealStatus 回显。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 06:33:44 -07:00
lili
0ec0955779 feat(studio): 市场发布上架状态可视化(生产者飞轮进度反馈)
「我的发布记录」新增发布生命周期中文徽标(草稿/已提交/审核中/已通过/
已上架/已驳回/需补充材料/已撤回/已下架/已召回)+ nextAction/appealStatus
副文本。上架=审核通过自动 markListed(非生产者动作),生产者侧通过本徽标
看到 publish→review→list 进度反馈。

活体证(反假绿,MSW off 直连单体 48080):
- market-publish.spec.ts 第 4 例 chromium 绿:断言 listed→「已上架」、
  rejected→「已驳回」徽标渲染(种子 /tmp/SetReqStatus.java 置 req#2→listed、#3→rejected;
  curl my-publish-records 证状态反映)。
- market-publish 4/4 + vitest 47/47 + tsc 干净。

申诉(appeal)后端经 curl 验证为 real+fail-closed(自有已驳回资产→appealId/pending;
他人资产→1044000024 无权访问;不存在资产→1044000003 资产不存在),但申诉 UI 后置:
真实 gap——my-publish-records 暴露的 assetId 是 publish-record id,非 submitAppeal
所需的物化 muse_market_asset.id(资产仅在 admin 审核通过 markListed 时物化),
UI 入口取不到正确 assetId,收口需后端额外暴露物化 assetId 或经真实审核通过物化流。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 05:36:36 -07:00
lili
288fce955f feat(studio+market): 市场发布提交审核全链(草稿→检查→提交)活体绿 + V22 补 review_event 索引
承上一提交(草稿切片),完成创作者发布全链到「提交审核」:
- MarketPublish 加 licenseType / 权利声明字段 + 「提交审核」按钮(save→运行检查→检查通过则提交申请);
  useMarketPublish 加 useRunPublishCheck / useSubmitPublishRequest。
- market-publish.spec.ts 3/3 绿(草稿正 / 缺标题负 / 提交全链),DB 证 muse_market_publish_request=submitted
  + muse_market_review_event=submitted 落库;全链测用唯一名→可重复跑。
  整套 e2e 11/11、vitest 47/47 无回归、tsc 绿。

修复:submitPublishRequest 的 writeSubmittedReviewEvent 命中 muse_market_review_event 同款部分索引
ON CONFLICT 不匹配 bug(submit 500);V22 迁移 + muse_slice_live 增补 review_event 索引(部分→完整,共 4 表)。
遗留:handoff/appeal/authorization_summary 等 market 表同类部分索引待对应流程活体时收口。

进度总账 §五C 已就地更新(市场生产侧:发布草稿 + 提交审核全链 )。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 02:10:12 -07:00
lili
0b6b1e8887 feat(studio+market): 市场生产侧发布草稿活体纵切 + 修 publish 部分索引 ON CONFLICT 潜伏 bug
studio 生产侧首切片(创作者飞轮起点):新增 /market/publish 发布表单(MarketPublish + useMarketPublish hook),
保存发布草稿经唯一合法入口 POST /marketplace/publish-drafts → my-publish-records 真实回读;
MarketBrowse 加「我要发布资产」入口。market-publish.spec.ts(chromium, MSW off, 真连 48080)正+负绿,
DB 证 muse_market_publish_draft 落库(status=draft);命令幂等键按材料 hash 派生→自包含可重复跑、无需预种。

附带修真实潜伏后端 bug(链路从未活体跑过):publish draft/check/request 的 (tenant_id,command_id)
被 V15 建为部分唯一索引(WHERE command_id IS NOT NULL),而各 mapper insertIgnore 发无谓词
ON CONFLICT (tenant_id,command_id)→PostgreSQL 无法用部分索引作仲裁器→savePublishDraft 500
(BadSqlGrammarException: no unique or exclusion constraint matching the ON CONFLICT specification)。
修=部分→完整唯一索引,对齐 muse_market_command/purchase 既有约定(V22 迁移 + muse_slice_live 已应用,
零 Java 改动/零重启)。遗留:handoff/appeal 等 market 表同类部分索引待对应流程活体时收口。

验证:整套 e2e 10/10 绿、vitest 47/47 无回归、tsc 绿。进度总账 §五C/§四/per-BC 已就地更新。

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