diff --git a/core/backend/apps/billing/apps.py b/core/backend/apps/billing/apps.py index 47a5e0b..119e546 100644 --- a/core/backend/apps/billing/apps.py +++ b/core/backend/apps/billing/apps.py @@ -5,3 +5,6 @@ class BillingConfig(AppConfig): default_auto_field = "django.db.models.BigAutoField" name = "apps.billing" + def ready(self): + from . import signals # noqa: F401 — 挂 AITask pre_delete 预留释放守护 + diff --git a/core/backend/apps/billing/signals.py b/core/backend/apps/billing/signals.py new file mode 100644 index 0000000..52ebb6d --- /dev/null +++ b/core/backend/apps/billing/signals.py @@ -0,0 +1,25 @@ +"""跨 app 账目守护信号。 + +CreditReservation.task 是 OneToOneField(on_delete=CASCADE):AITask 被硬删(用户删项目 +→ AITask.project CASCADE 级联删任务、或直接删任务)时,预留行会被一并删掉。若该预留 +还处于 ACTIVE,account.reserved_balance 里冻结的份额就永远退不回来 —— 这是资金审计 +I2「冻结不平」的根因(ZWQ-Test / 演示团队实测漂移 ¥10 / ¥30,且随测试删项目持续增长)。 + +修法:在 AITask 删除前(pre_delete,级联删除同样触发)把仍 ACTIVE 的预留正常走 +release_credit 释放 —— 退还冻结、落 RELEASE 流水,然后再让级联删掉预留行。 +release_credit 自带行锁 + 幂等(非 ACTIVE 直接返回),并发安全。 +""" +from django.db.models.signals import pre_delete +from django.dispatch import receiver + + +@receiver(pre_delete, sender="ai.AITask", dispatch_uid="billing.release_reservation_before_task_delete") +def release_reservation_before_task_delete(sender, instance, **kwargs): + from apps.billing.models import CreditReservation + from apps.billing.services.ledger import release_credit + + reservation = CreditReservation.objects.filter( + task=instance, status=CreditReservation.Status.ACTIVE + ).first() + if reservation is not None: + release_credit(reservation=reservation, reason="任务删除,释放未结预留") diff --git a/core/backend/apps/billing/tests.py b/core/backend/apps/billing/tests.py index 3bf186c..e1bd3e4 100644 --- a/core/backend/apps/billing/tests.py +++ b/core/backend/apps/billing/tests.py @@ -59,6 +59,48 @@ class CreditLedgerTests(TestCase): self.assertEqual(self.account.reserved_balance, Decimal("0.0000")) self.assertEqual(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE).count(), 1) + def test_task_delete_releases_active_reservation(self): + """回归:CreditReservation.task 是 CASCADE,直接删任务会把 ACTIVE 预留行吞掉, + reserved_balance 冻结永不归还(审计 I2 冻结不平根因)。pre_delete 信号必须先释放。""" + reserve_credit(team=self.team, user=self.user, task=self.task, amount=Decimal("10.0000")) + self.task.delete() + self.account.refresh_from_db() + + self.assertEqual(self.account.reserved_balance, Decimal("0.0000")) + self.assertEqual(self.account.balance, Decimal("100.0000")) + self.assertEqual(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE).count(), 1) + self.assertFalse(CreditReservation.objects.exists()) # 预留行随任务级联删除 + + def test_project_delete_cascade_releases_reservation(self): + """回归:删项目 → AITask.project CASCADE 级联删任务,同样必须先释放 ACTIVE 预留。""" + from apps.products.models import Product + from apps.projects.models import Project + + product = Product.objects.create(team=self.team, created_by=self.user, title="P 商品") + project = Project.objects.create(team=self.team, created_by=self.user, product=product, name="P") + task = AITask.objects.create( + team=self.team, created_by=self.user, project=project, + task_type=AITask.Type.SCRIPT_GENERATION, model_config=self.model, + idempotency_key="billing-test-task-proj", estimated_cost=Decimal("5.0000"), + ) + reserve_credit(team=self.team, user=self.user, task=task, amount=Decimal("5.0000")) + project.delete() + self.account.refresh_from_db() + + self.assertEqual(self.account.reserved_balance, Decimal("0.0000")) + self.assertTrue(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE, reason="任务删除,释放未结预留").exists()) + + def test_task_delete_after_charge_does_not_double_release(self): + """已扣费(CHARGED)的预留再删任务,信号不应重复释放(release_credit 幂等 + 信号只挑 ACTIVE)。""" + reservation = reserve_credit(team=self.team, user=self.user, task=self.task, amount=Decimal("10.0000")) + charge_reserved_credit(reservation=reservation, actual_amount=Decimal("10.0000")) + self.task.delete() + self.account.refresh_from_db() + + self.assertEqual(self.account.balance, Decimal("90.0000")) + self.assertEqual(self.account.reserved_balance, Decimal("0.0000")) + self.assertEqual(CreditLedger.objects.filter(ledger_type=CreditLedger.Type.RELEASE).count(), 0) # 无多余释放 + class MemberLimitTests(TestCase): """成员三档额度(每日/每月/累计总额,0=不限)在 reserve_credit 时逐档管控(PMC#17/#18)。""" diff --git a/core/qa/function-audit/output/account.audit.json b/core/qa/function-audit/output/account.audit.json index 7930188..7d72af2 100644 --- a/core/qa/function-audit/output/account.audit.json +++ b/core/qa/function-audit/output/account.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/account", "mode": "quick", "tally": { - "total": 26, - "works": 20, - "dead": 0, + "total": 29, + "works": 24, + "dead": 1, "error": 0, "disabled": 0, - "skipped": 5, + "skipped": 3, "noop": 1, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -145,6 +145,24 @@ "tag": "a", "role": "", "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 41, + "api": 4 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", "label": "资产库", "href": "/library", "disabled": false, @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 37, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "active", @@ -190,12 +208,33 @@ "url": false, "overlay": false, "self": false, - "mutations": 18, + "mutations": 23, "api": 0 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 2 + }, + "consoleNote": [ + "Failed to load resource: the server responded with a status of 404 (Not Found)" + ] + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +247,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +283,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +301,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "div", "role": "button", "cls": "recharge-card.", @@ -262,12 +319,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 9, + "mutations": 12, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "div", "role": "button", "cls": "recharge-card.", @@ -280,12 +337,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 9, + "mutations": 12, "api": 0 } }, { - "idx": 15, + "idx": 18, "tag": "div", "role": "button", "cls": "recharge-card.", @@ -298,12 +355,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 9, + "mutations": 12, "api": 0 } }, { - "idx": 16, + "idx": 19, "tag": "div", "role": "button", "cls": "recharge-card.", @@ -316,12 +373,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 9, + "mutations": 12, "api": 0 } }, { - "idx": 17, + "idx": 20, "tag": "button", "role": "", "cls": "btn.pay-method-btn.pay-wechat", @@ -332,7 +389,7 @@ "verdict": "skipped-destructive" }, { - "idx": 18, + "idx": 21, "tag": "button", "role": "", "cls": "btn.pay-method-btn.pay-alipay", @@ -343,7 +400,7 @@ "verdict": "skipped-destructive" }, { - "idx": 19, + "idx": 22, "tag": "button", "role": "", "cls": "tab.active", @@ -360,74 +417,98 @@ "api": 0 } }, - { - "idx": 20, - "tag": "button", - "role": "", - "cls": "tab.", - "label": "项目 6", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - } - }, - { - "idx": 21, - "tag": "button", - "role": "", - "cls": "tab.", - "label": "成员 1", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - } - }, - { - "idx": 22, - "tag": "button", - "role": "", - "cls": "tab.", - "label": "账单流水 254", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - } - }, { "idx": 23, - "label": "", - "tag": "", - "verdict": "stale" + "tag": "button", + "role": "", + "cls": "tab.", + "label": "项目 20", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 10, + "api": 0 + } }, { "idx": 24, - "label": "", - "tag": "", - "verdict": "stale" + "tag": "button", + "role": "", + "cls": "tab.", + "label": "成员 4", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 10, + "api": 0 + } }, { "idx": 25, + "tag": "button", + "role": "", + "cls": "tab.", + "label": "账单流水 1368", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 10, + "api": 0 + } + }, + { + "idx": 26, + "tag": "select", + "role": "", + "cls": "", + "label": "按类型筛选", + "href": "", + "disabled": false, + "active": false, + "verdict": "dead", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 0, + "api": 0 + } + }, + { + "idx": 27, + "tag": "select", + "role": "", + "cls": "", + "label": "按成员筛选", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 66, + "api": 1 + } + }, + { + "idx": 28, "label": "", "tag": "", "verdict": "stale" @@ -436,7 +517,6 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户" + "余额 ¥14,072.00" ] } diff --git a/core/qa/function-audit/output/account.audit.md b/core/qa/function-audit/output/account.audit.md index 06e308a..457b2b8 100644 --- a/core/qa/function-audit/output/account.audit.md +++ b/core/qa/function-audit/output/account.audit.md @@ -1,15 +1,19 @@ # 功能审计 · account 路由:`/account` · 模式:quick -合计 26 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 1 · ⚪ disabled 0 +合计 29 · ✅ works 24 · ❌ **dead 1** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 1 · ⚪ disabled 0 + +## ❌ 点了没反应(DEAD —— 重点修) +| # | 文字 | 标签 | 类名 | +|---|---|---|---| +| 26 | 按类型筛选 | `select` | `` | ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 ## ⏭ 破坏性按钮(未自动点,需人工验) - 微信支付 `button` diff --git a/core/qa/function-audit/output/asset-factory.audit.json b/core/qa/function-audit/output/asset-factory.audit.json index 5e5a15d..ad4df3a 100644 --- a/core/qa/function-audit/output/asset-factory.audit.json +++ b/core/qa/function-audit/output/asset-factory.audit.json @@ -1,15 +1,15 @@ { "name": "asset-factory", "route": "/asset-factory", - "url": "http://127.0.0.1:5173/asset-factory", + "url": "http://127.0.0.1:5174/asset-factory", "mode": "quick", "tally": { - "total": 24, - "works": 23, + "total": 35, + "works": 31, "dead": 0, "error": 0, "disabled": 0, - "skipped": 0, + "skipped": 3, "noop": 1, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -37,7 +37,7 @@ "tag": "button", "role": "", "cls": "sidebar-toggle", - "label": "展开导航", + "label": "收窄导航", "href": "", "disabled": false, "active": false, @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,80 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 20, - "api": 0 - } - }, - { - "idx": 6, - "tag": "a", - "role": "", - "cls": "active", - "label": "图片生成", - "href": "/asset-factory", - "disabled": false, - "active": true, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 17, - "api": 0 - } - }, - { - "idx": 7, - "tag": "a", - "role": "", - "cls": "", - "label": "资产库", - "href": "/library", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 37, - "api": 0 - } - }, - { - "idx": 8, - "tag": "a", - "role": "", - "cls": "", - "label": "团队", - "href": "/team", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 20, - "api": 0 - } - }, - { - "idx": 9, - "tag": "a", - "role": "", - "cls": "", - "label": "消费", - "href": "/account", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -194,11 +122,119 @@ "api": 1 } }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", + "label": "视频项目", + "href": "/projects", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 24, + "api": 0 + } + }, + { + "idx": 7, + "tag": "a", + "role": "", + "cls": "active", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": true, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 19, + "api": 0 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", + "label": "资产库", + "href": "/library", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 31, + "api": 5 + } + }, + { + "idx": 9, + "tag": "a", + "role": "", + "cls": "", + "label": "团队", + "href": "/team", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 37, + "api": 3 + } + }, { "idx": 10, "tag": "a", "role": "", "cls": "", + "label": "消费", + "href": "/account", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 108, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 21, + "api": 2 + } + }, + { + "idx": 12, + "tag": "a", + "role": "", + "cls": "", "label": "设置", "href": "/settings", "disabled": false, @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 22, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,74 +298,70 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, - { - "idx": 13, - "tag": "button", - "role": "", - "cls": "btn.btn-primary.btn-lg", - "label": "开始生成", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, - { - "idx": 14, - "tag": "button", - "role": "", - "cls": "btn.btn-primary.btn-lg", - "label": "开始生成", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 18, - "api": 0 - } - }, - { - "idx": 15, - "tag": "button", - "role": "", - "cls": "btn.btn-primary.btn-lg", - "label": "开始生成", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 18, - "api": 0 - } - }, { "idx": 16, + "tag": "button", + "role": "", + "cls": "btn.btn-primary.btn-lg", + "label": "开始生成", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 32, + "api": 2 + } + }, + { + "idx": 17, + "tag": "button", + "role": "", + "cls": "btn.btn-primary.btn-lg", + "label": "开始生成", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 52, + "api": 2 + } + }, + { + "idx": 18, + "tag": "button", + "role": "", + "cls": "btn.btn-primary.btn-lg", + "label": "开始生成", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 38, + "api": 3 + } + }, + { + "idx": 19, "tag": "div", "role": "button", "cls": "tab.active", - "label": "全部 20", + "label": "全部 70", "href": "", "disabled": false, "active": true, @@ -325,7 +375,7 @@ } }, { - "idx": 17, + "idx": 20, "tag": "div", "role": "button", "cls": "tab", @@ -338,16 +388,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 23, + "mutations": 21, "api": 0 } }, { - "idx": 18, + "idx": 21, "tag": "div", "role": "button", "cls": "tab", - "label": "已完成 15", + "label": "已完成 67", "href": "", "disabled": false, "active": false, @@ -361,11 +411,11 @@ } }, { - "idx": 19, + "idx": 22, "tag": "div", "role": "button", "cls": "tab", - "label": "失败 5", + "label": "失败 3", "href": "", "disabled": false, "active": false, @@ -374,12 +424,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 24, + "mutations": 20, "api": 0 } }, { - "idx": 20, + "idx": 23, "tag": "button", "role": "", "cls": "chip", @@ -397,7 +447,7 @@ } }, { - "idx": 21, + "idx": 24, "tag": "div", "role": "button", "cls": "mi.selected", @@ -415,7 +465,7 @@ } }, { - "idx": 22, + "idx": 25, "tag": "button", "role": "", "cls": "clear-filters", @@ -428,12 +478,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 16, + "mutations": 14, "api": 0 } }, { - "idx": 23, + "idx": 26, "tag": "button", "role": "", "cls": "active", @@ -446,16 +496,123 @@ "url": false, "overlay": false, "self": true, - "mutations": 15, + "mutations": 13, "api": 0 } + }, + { + "idx": 27, + "tag": "button", + "role": "", + "cls": "", + "label": "列表", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 5, + "api": 0 + } + }, + { + "idx": 28, + "tag": "article", + "role": "button", + "cls": "task-card.history-card", + "label": "查看本批图片", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 11, + "api": 1 + } + }, + { + "idx": 29, + "tag": "article", + "role": "button", + "cls": "task-card.history-card", + "label": "查看本批图片", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 10, + "api": 1 + } + }, + { + "idx": 30, + "tag": "article", + "role": "button", + "cls": "task-card.history-card", + "label": "查看本批图片", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 10, + "api": 1 + } + }, + { + "idx": 31, + "tag": "button", + "role": "", + "cls": "x", + "label": "关闭", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 5, + "api": 0 + } + }, + { + "idx": 32, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 33, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 34, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,071.00", "时间" ] } diff --git a/core/qa/function-audit/output/asset-factory.audit.md b/core/qa/function-audit/output/asset-factory.audit.md index 03b3dcc..9f86294 100644 --- a/core/qa/function-audit/output/asset-factory.audit.md +++ b/core/qa/function-audit/output/asset-factory.audit.md @@ -1,14 +1,13 @@ # 功能审计 · asset-factory 路由:`/asset-factory` · 模式:quick -合计 24 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0 +合计 35 · ✅ works 31 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 1 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,071.00 - 时间 diff --git a/core/qa/function-audit/output/dashboard.audit.json b/core/qa/function-audit/output/dashboard.audit.json index 965d459..fc8bc73 100644 --- a/core/qa/function-audit/output/dashboard.audit.json +++ b/core/qa/function-audit/output/dashboard.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/dashboard", "mode": "quick", "tally": { - "total": 25, - "works": 20, + "total": 31, + "works": 28, "dead": 0, "error": 0, "disabled": 0, - "skipped": 5, + "skipped": 3, "noop": 0, "blocked": 0 }, @@ -28,7 +28,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 19, + "mutations": 30, "api": 0 } }, @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,7 +82,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 19, + "mutations": 30, "api": 0 } }, @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 30, + "mutations": 41, "api": 0 } }, @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 29, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 31, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 29, - "api": 0 + "mutations": 49, + "api": 3 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 42, - "api": 0 + "mutations": 45, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 29, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 27, + "mutations": 109, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 31, "api": 1 } }, { - "idx": 10, + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 54, + "mutations": 29, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "button", "role": "", "cls": "icon-btn", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 28, + "mutations": 33, "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "btn", @@ -241,15 +295,15 @@ "active": false, "verdict": "works", "signals": { - "url": true, - "overlay": false, + "url": false, + "overlay": true, "self": false, - "mutations": 30, + "mutations": 24, "api": 0 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-primary.btn-lg", @@ -260,109 +314,18 @@ "verdict": "works", "signals": { "url": true, - "overlay": false, + "overlay": true, "self": false, - "mutations": 25, + "mutations": 60, "api": 0 } }, - { - "idx": 14, - "tag": "button", - "role": "", - "cls": "stat", - "label": "余额 ¥¥14908.00已冻结 ¥0.00", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 27, - "api": 1 - } - }, - { - "idx": 15, - "tag": "button", - "role": "", - "cls": "more", - "label": "[ ALL · 6 ] →", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 25, - "api": 0 - } - }, - { - "idx": 16, - "tag": "button", - "role": "", - "cls": "recent-row", - "label": "9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产继", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, { "idx": 17, "tag": "button", "role": "", - "cls": "recent-row", - "label": "9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜拼接导出继续", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, - { - "idx": 18, - "tag": "button", - "role": "", - "cls": "recent-row", - "label": "9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, - { - "idx": 19, - "tag": "button", - "role": "", - "cls": "recent-row", - "label": "9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本继续", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, - { - "idx": 20, - "tag": "button", - "role": "", - "cls": "recent-row", - "label": "9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, - { - "idx": 21, - "tag": "a", - "role": "", - "cls": "shortcut", - "label": "商品库8 SKU", + "cls": "stat", + "label": "总项目 ALL39", "href": "", "disabled": false, "active": false, @@ -371,16 +334,16 @@ "url": true, "overlay": false, "self": false, - "mutations": 30, + "mutations": 31, "api": 0 } }, { - "idx": 22, - "tag": "a", + "idx": 18, + "tag": "button", "role": "", - "cls": "shortcut", - "label": "资产库101 资产", + "cls": "stat", + "label": "进行中 WIP16", "href": "", "disabled": false, "active": false, @@ -394,11 +357,11 @@ } }, { - "idx": 23, - "tag": "a", + "idx": 19, + "tag": "button", "role": "", - "cls": "shortcut", - "label": "充值¥14908.00", + "cls": "stat", + "label": "成片 DONE4", "href": "", "disabled": false, "active": false, @@ -407,16 +370,103 @@ "url": true, "overlay": false, "self": false, - "mutations": 27, + "mutations": 45, + "api": 0 + } + }, + { + "idx": 20, + "tag": "button", + "role": "", + "cls": "stat", + "label": "余额 ¥¥14074.00冻结 ¥4.00 / 共 ¥14078.00", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 112, + "api": 4 + } + }, + { + "idx": 21, + "tag": "button", + "role": "", + "cls": "more", + "label": "[ ALL · 39 ] →", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 31, + "api": 0 + } + }, + { + "idx": 22, + "tag": "button", + "role": "", + "cls": "recent-row", + "label": "9:16南卡 · 短视频 · v4南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜基", + "href": "", + "disabled": false, + "active": false, + "verdict": "skipped-destructive" + }, + { + "idx": 23, + "tag": "button", + "role": "", + "cls": "recent-row", + "label": "9:16Apple/苹果 · 短视频 · v3Apple/苹果 iPhone 17 Pro / ", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 7, "api": 1 } }, { "idx": 24, - "tag": "a", + "tag": "button", "role": "", - "cls": "shortcut", - "label": "所有项目6 个", + "cls": "recent-row", + "label": "9:16南卡 · 短视频 · v12南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜", + "href": "", + "disabled": false, + "active": false, + "verdict": "skipped-destructive" + }, + { + "idx": 25, + "tag": "button", + "role": "", + "cls": "recent-row", + "label": "9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 1 镜视频片段继续", + "href": "", + "disabled": false, + "active": false, + "verdict": "skipped-destructive" + }, + { + "idx": 26, + "tag": "button", + "role": "", + "cls": "recent-row", + "label": "9:16Apple/苹果 · 短视频 · v2Apple/苹果 iPhone 17 Pro / ", "href": "", "disabled": false, "active": false, @@ -425,7 +475,79 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 27, + "tag": "a", + "role": "", + "cls": "shortcut", + "label": "商品库17 SKU", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 41, + "api": 0 + } + }, + { + "idx": 28, + "tag": "a", + "role": "", + "cls": "shortcut", + "label": "资产库53 资产", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 41, + "api": 5 + } + }, + { + "idx": 29, + "tag": "a", + "role": "", + "cls": "shortcut", + "label": "充值¥14074.00", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 31, + "api": 4 + } + }, + { + "idx": 30, + "tag": "a", + "role": "", + "cls": "shortcut", + "label": "所有项目39 个", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 31, "api": 0 } } @@ -433,21 +555,16 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,908.00", - "账户", - "总项目 ALL 6 本月完成 2", - "进行中 WIP 4 全部正常推进", - "本月成片 DONE 2 累计完成 2", - "余额 ¥ ¥14,908.00 已用 ¥113.00 / ¥15,021.00", - "[ ALL · 6 ]", - "9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产生", - "9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜已完成打开", - "9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本待生成继", + "余额 ¥14,074.00", + "总项目 ALL 20 本月完成 0", + "进行中 WIP 16 全部正常推进", + "本月成片 DONE 4 累计完成 4", + "余额 ¥ ¥14,074.00 已用 ¥947.00 / ¥15,021.00", + "[ ALL · 20 ]", + "9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 4 镜已完成打开", "资产库资产 20 个", - "充值¥14,908.00", + "充值¥14,074.00", "基础资产生成中", - "已完成", - "脚本待生成", - "故事板生成中" + "已完成" ] } diff --git a/core/qa/function-audit/output/dashboard.audit.md b/core/qa/function-audit/output/dashboard.audit.md index a57e3e3..48eeee2 100644 --- a/core/qa/function-audit/output/dashboard.audit.md +++ b/core/qa/function-audit/output/dashboard.audit.md @@ -1,34 +1,27 @@ # 功能审计 · dashboard 路由:`/dashboard` · 模式:quick -合计 25 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 0 +合计 31 · ✅ works 28 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,908.00 -- 账户 -- 总项目 ALL 6 本月完成 2 -- 进行中 WIP 4 全部正常推进 -- 本月成片 DONE 2 累计完成 2 -- 余额 ¥ ¥14,908.00 已用 ¥113.00 / ¥15,021.00 -- [ ALL · 6 ] -- 9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产生 -- 9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜已完成打开 -- 9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本待生成继 +- 余额 ¥14,074.00 +- 总项目 ALL 20 本月完成 0 +- 进行中 WIP 16 全部正常推进 +- 本月成片 DONE 4 累计完成 4 +- 余额 ¥ ¥14,074.00 已用 ¥947.00 / ¥15,021.00 +- [ ALL · 20 ] +- 9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 4 镜已完成打开 - 资产库资产 20 个 -- 充值¥14,908.00 +- 充值¥14,074.00 - 基础资产生成中 - 已完成 -- 脚本待生成 -- 故事板生成中 ## ⏭ 破坏性按钮(未自动点,需人工验) -- 9:16真应用验证项目 · 补水面膜种草透真玻尿酸补水面膜 / AI 全生 / 4 镜基础资产继 `button` -- 9:16端到端播放器验证南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜拼接导出继续 `button` -- 9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜 `button` -- 9:16桥接测试项目 20260529透真玻尿酸补水面膜 / AI 全生 / 4 镜脚本继续 `button` -- 9:16南卡 · 痛点种草 · v1南卡 Lite Pro 蓝牙耳机 / AI 全生 / 4 镜 `button` +- 9:16南卡 · 短视频 · v4南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜基 `button` +- 9:16南卡 · 短视频 · v12南卡 Lite Pro 蓝牙耳机 / AI 全生 / 1 镜 `button` +- 9:16内衣-文胸 · 短视频 · v2内衣-文胸 / AI 全生 / 1 镜视频片段继续 `button` diff --git a/core/qa/function-audit/output/image-optimize.audit.json b/core/qa/function-audit/output/image-optimize.audit.json index 11ba7bc..4f5d996 100644 --- a/core/qa/function-audit/output/image-optimize.audit.json +++ b/core/qa/function-audit/output/image-optimize.audit.json @@ -4,13 +4,13 @@ "url": "http://127.0.0.1:5173/image-optimize", "mode": "quick", "tally": { - "total": 24, - "works": 21, - "dead": 2, + "total": 37, + "works": 34, + "dead": 1, "error": 0, "disabled": 0, "skipped": 0, - "noop": 1, + "noop": 2, "blocked": 0 }, "results": [ @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 22, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 24, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "active", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 56, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,33 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 105, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 2 + }, + "consoleNote": [ + "Failed to load resource: the server responded with a status of 404 (Not Found)" + ] + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +247,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +283,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +301,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "back-pill", @@ -262,12 +319,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 4 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "ic-new-conv", @@ -280,124 +337,16 @@ "url": false, "overlay": false, "self": false, - "mutations": 3, - "api": 0 - } - }, - { - "idx": 15, - "tag": "button", - "role": "", - "cls": "ex", - "label": "一只穿着宇航服的橘猫,漂浮在霓虹色星云中,赛博朋克风", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 4, - "api": 0 - } - }, - { - "idx": 16, - "tag": "button", - "role": "", - "cls": "ex", - "label": "极简北欧风格的茶杯,白底,自然柔光,产品摄影", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 4, - "api": 0 - } - }, - { - "idx": 17, - "tag": "button", - "role": "", - "cls": "ex", - "label": "国风水墨海报,主体一只白鹤立于水边,留白构图", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 4, - "api": 0 + "mutations": 0, + "api": 1 } }, { "idx": 18, - "tag": "button", - "role": "", - "cls": "ex", - "label": "电影感都市夜景,街道湿漉漉反射霓虹,4K 高清", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 4, - "api": 0 - } - }, - { - "idx": 19, - "tag": "button", - "role": "", - "cls": "add-btn", - "label": "上传参考图", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 20, - "tag": "button", - "role": "", - "cls": "ic-param-btn", - "label": "比例1:1", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 1, - "api": 0 - } - }, - { - "idx": 21, - "tag": "button", - "role": "", - "cls": "mi.selected", - "label": "1:1", + "tag": "div", + "role": "button", + "cls": "ic-conv-item.active", + "label": "默认创作", "href": "", "disabled": false, "active": true, @@ -410,16 +359,308 @@ "api": 0 } }, + { + "idx": 19, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "南卡 Lite Pro 蓝牙耳机 白底商品三视图", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 20, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "默认创作", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 19, + "api": 1 + } + }, + { + "idx": 21, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "南卡 Lite Pro 蓝牙耳机 白底商品三视图", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, { "idx": 22, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "南卡 Lite Pro 蓝牙耳机 白底商品三视图", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 23, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "露露同款裸感瑜伽裤 白底商品三视图,正面 / 侧", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 24, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "默认创作", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 25, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "默认创作", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 26, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "默认创作", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 27, + "tag": "div", + "role": "button", + "cls": "ic-conv-item.", + "label": "深成该背心的穿戴的不同的那个场景。", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 1 + } + }, + { + "idx": 28, "tag": "button", "role": "", - "cls": "mi.", - "label": "3:4", + "cls": "gen-img-btn", + "label": "再生成", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 23, + "api": 1 + } + }, + { + "idx": 29, + "tag": "button", + "role": "", + "cls": "gen-img-btn", + "label": "下载", "href": "", "disabled": false, "active": false, "verdict": "dead", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 0, + "api": 0 + }, + "consoleNote": [ + "Access to fetch at 'https://airshelf.tos-s3-cn-shanghai.volces.com/teams/90fc4844-48fe-4445-a709-3362b3d40918/standalone/8883fcf4-1f91-4626-a445-4c4786c4b91c.png' from origin 'http://127.0.0.1:5173' h", + "Failed to load resource: net::ERR_FAILED" + ] + }, + { + "idx": 30, + "tag": "button", + "role": "", + "cls": "gen-img-btn", + "label": "更多", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 4, + "api": 0 + } + }, + { + "idx": 31, + "tag": "button", + "role": "", + "cls": "gen-bubble-item", + "label": "加入模特库", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 6, + "api": 1 + } + }, + { + "idx": 32, + "tag": "button", + "role": "", + "cls": "btn.btn-sm.btn-ghost", + "label": "更多", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 6, + "api": 0 + } + }, + { + "idx": 33, + "tag": "button", + "role": "", + "cls": "add-btn", + "label": "上传参考图(可多张)", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 1, + "api": 0 + } + }, + { + "idx": 34, + "tag": "button", + "role": "", + "cls": "ic-param-btn", + "label": "模型火山 Seedream", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 1, + "api": 0 + } + }, + { + "idx": 35, + "tag": "button", + "role": "", + "cls": "mi.selected", + "label": "火山 Seedream", + "href": "", + "disabled": false, + "active": true, + "verdict": "noop-active", "signals": { "url": false, "overlay": false, @@ -429,20 +670,20 @@ } }, { - "idx": 23, + "idx": 36, "tag": "button", "role": "", "cls": "mi.", - "label": "4:5", + "label": "gpt-image-2", "href": "", "disabled": false, "active": false, - "verdict": "dead", + "verdict": "works", "signals": { "url": false, "overlay": false, "self": false, - "mutations": 0, + "mutations": 20, "api": 0 } } @@ -450,8 +691,7 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,072.00", "折叠侧栏", "时间", "生成模式", @@ -459,6 +699,7 @@ "一只穿着宇航服的橘猫,漂浮在霓虹色星云中,赛博朋克风", "极简北欧风格的茶杯,白底,自然柔光,产品摄影", "国风水墨海报,主体一只白鹤立于水边,留白构图", - "电影感都市夜景,街道湿漉漉反射霓虹,4K 高清" + "电影感都市夜景,街道湿漉漉反射霓虹,4K 高清", + "上传参考图" ] } diff --git a/core/qa/function-audit/output/image-optimize.audit.md b/core/qa/function-audit/output/image-optimize.audit.md index ceaf88e..9f6a3fd 100644 --- a/core/qa/function-audit/output/image-optimize.audit.md +++ b/core/qa/function-audit/output/image-optimize.audit.md @@ -1,21 +1,19 @@ # 功能审计 · image-optimize 路由:`/image-optimize` · 模式:quick -合计 24 · ✅ works 21 · ❌ **dead 2** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0 +合计 37 · ✅ works 34 · ❌ **dead 1** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 2 · ⚪ disabled 0 ## ❌ 点了没反应(DEAD —— 重点修) | # | 文字 | 标签 | 类名 | |---|---|---|---| -| 22 | 3:4 | `button` | `mi.` | -| 23 | 4:5 | `button` | `mi.` | +| 29 | 下载 | `button` | `gen-img-btn` | ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 - 折叠侧栏 - 时间 - 生成模式 @@ -24,4 +22,5 @@ - 极简北欧风格的茶杯,白底,自然柔光,产品摄影 - 国风水墨海报,主体一只白鹤立于水边,留白构图 - 电影感都市夜景,街道湿漉漉反射霓虹,4K 高清 +- 上传参考图 diff --git a/core/qa/function-audit/output/library.audit.json b/core/qa/function-audit/output/library.audit.json index 9e0ea11..74cff4c 100644 --- a/core/qa/function-audit/output/library.audit.json +++ b/core/qa/function-audit/output/library.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/library", "mode": "quick", "tally": { - "total": 38, - "works": 23, + "total": 28, + "works": 27, "dead": 0, "error": 0, - "disabled": 1, - "skipped": 13, + "disabled": 0, + "skipped": 0, "noop": 1, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 26, - "api": 0 + "mutations": 47, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 26, - "api": 0 + "mutations": 47, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -144,6 +144,24 @@ "idx": 7, "tag": "a", "role": "", + "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 41, + "api": 3 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", "cls": "active", "label": "资产库", "href": "/library", @@ -154,12 +172,12 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 37, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, + "mutations": 69, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, "api": 1 } }, { - "idx": 10, + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-edit-toggle", @@ -262,34 +316,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 20, + "mutations": 8, "api": 0 } }, { - "idx": 14, - "tag": "button", - "role": "", - "cls": "btn.btn-primary", - "label": "上传资产", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": true, - "self": false, - "mutations": 4, - "api": 0 - } - }, - { - "idx": 15, + "idx": 17, "tag": "div", "role": "", "cls": "tab.active", - "label": "人物 15", + "label": "模特上身图 3", "href": "", "disabled": false, "active": true, @@ -302,48 +338,12 @@ "api": 0 } }, - { - "idx": 16, - "tag": "div", - "role": "", - "cls": "tab", - "label": "场景 22", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 81, - "api": 0 - } - }, - { - "idx": 17, - "tag": "div", - "role": "", - "cls": "tab", - "label": "商品图 39", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 121, - "api": 0 - } - }, { "idx": 18, "tag": "div", "role": "", "cls": "tab", - "label": "成片 23", + "label": "平台套图 3", "href": "", "disabled": false, "active": false, @@ -352,8 +352,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 84, - "api": 0 + "mutations": 9, + "api": 3 } }, { @@ -361,7 +361,7 @@ "tag": "div", "role": "", "cls": "tab", - "label": "我的上传 3", + "label": "自由创作 1", "href": "", "disabled": false, "active": false, @@ -370,8 +370,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 51, - "api": 0 + "mutations": 9, + "api": 3 } }, { @@ -379,7 +379,7 @@ "tag": "div", "role": "", "cls": "tab", - "label": "未分类 0", + "label": "视频成品 7", "href": "", "disabled": false, "active": false, @@ -388,12 +388,66 @@ "url": false, "overlay": false, "self": true, - "mutations": 26, - "api": 0 + "mutations": 6, + "api": 1 } }, { "idx": 21, + "tag": "div", + "role": "", + "cls": "tab", + "label": "其他 46", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 15, + "api": 3 + } + }, + { + "idx": 22, + "tag": "button", + "role": "", + "cls": "chip", + "label": "资产类型", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 23, + "tag": "div", + "role": "button", + "cls": "mi.selected", + "label": "全部类型", + "href": "", + "disabled": false, + "active": true, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 3, + "api": 0 + } + }, + { + "idx": 24, "tag": "button", "role": "", "cls": "chip", @@ -404,36 +458,18 @@ "verdict": "works", "signals": { "url": false, - "overlay": true, - "self": false, - "mutations": 8, - "api": 0 + "overlay": false, + "self": true, + "mutations": 39, + "api": 1 } }, { - "idx": 22, - "tag": "div", + "idx": 25, + "tag": "article", "role": "button", - "cls": "mi.selected", - "label": "最近添加", - "href": "", - "disabled": false, - "active": true, - "verdict": "works", - "signals": { - "url": false, - "overlay": true, - "self": false, - "mutations": 8, - "api": 0 - } - }, - { - "idx": 23, - "tag": "button", - "role": "", - "cls": "btn.btn-ghost", - "label": "取消", + "cls": "asset-card.audio", + "label": "AUDIO配音 · 场 4 · 句 2未分类 · AI 生成", "href": "", "disabled": false, "active": false, @@ -442,110 +478,62 @@ "url": false, "overlay": false, "self": true, - "mutations": 10, + "mutations": 8, + "api": 1 + } + }, + { + "idx": 26, + "tag": "article", + "role": "button", + "cls": "asset-card.image", + "label": "ea9d4d0ecc5334fbd780a7217bcdd3430597562a5a3f0-w2", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 6, "api": 0 } }, - { - "idx": 24, - "tag": "button", - "role": "", - "cls": "btn.btn-primary", - "label": "上传资产", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" - }, - { - "idx": 25, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 26, - "label": "", - "tag": "", - "verdict": "stale" - }, { "idx": 27, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 28, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 29, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 30, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 31, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 32, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 33, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 34, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 35, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 36, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 37, - "label": "", - "tag": "", - "verdict": "stale" + "tag": "article", + "role": "button", + "cls": "asset-card.image", + "label": "ea9d4d0ecc5334fbd780a7217bcdd3430597562a5a3f0-w2", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 4, + "api": 0 + } } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,072.00", "管理资产", + "上传资产", "性别", "年龄段", "角色标签", - "来源", - "最近使用" + "最近使用", + "人物 2", + "场景 1", + "商品图 5", + "成片 1", + "我的上传 4", + "未分类 7" ] } diff --git a/core/qa/function-audit/output/library.audit.md b/core/qa/function-audit/output/library.audit.md index a83770e..bf3a86c 100644 --- a/core/qa/function-audit/output/library.audit.md +++ b/core/qa/function-audit/output/library.audit.md @@ -1,19 +1,24 @@ # 功能审计 · library 路由:`/library` · 模式:quick -合计 38 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)13 · ◷ noop-active 1 · ⚪ disabled 1 +合计 28 · ✅ works 27 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 - 管理资产 +- 上传资产 - 性别 - 年龄段 - 角色标签 -- 来源 - 最近使用 +- 人物 2 +- 场景 1 +- 商品图 5 +- 成片 1 +- 我的上传 4 +- 未分类 7 diff --git a/core/qa/function-audit/output/messages.audit.json b/core/qa/function-audit/output/messages.audit.json index 15b10c0..4a4fda5 100644 --- a/core/qa/function-audit/output/messages.audit.json +++ b/core/qa/function-audit/output/messages.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/messages", "mode": "quick", "tally": { - "total": 28, - "works": 20, + "total": 34, + "works": 23, "dead": 0, "error": 0, "disabled": 0, - "skipped": 7, + "skipped": 10, "noop": 1, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 + "mutations": 31, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 24, - "api": 0 + "mutations": 45, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 24, + "mutations": 33, "api": 0 } }, @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 19, - "api": 0 + "mutations": 21, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -145,6 +145,24 @@ "tag": "a", "role": "", "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 40, + "api": 4 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", "label": "资产库", "href": "/library", "disabled": false, @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 36, - "api": 0 + "mutations": 37, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 19, - "api": 0 + "mutations": 36, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,33 @@ "url": true, "overlay": false, "self": true, - "mutations": 21, - "api": 1 + "mutations": 104, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 23, + "api": 2 + }, + "consoleNote": [ + "Failed to load resource: the server responded with a status of 404 (Not Found)" + ] + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +247,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 48, + "mutations": 53, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +283,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 + "mutations": 45, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +301,12 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 20, "api": 0 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn", @@ -263,11 +320,11 @@ "overlay": false, "self": false, "mutations": 0, - "api": 2 + "api": 1 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "btn", @@ -280,16 +337,16 @@ "url": true, "overlay": false, "self": false, - "mutations": 58, - "api": 2 + "mutations": 57, + "api": 3 } }, { - "idx": 15, + "idx": 18, "tag": "button", "role": "", "cls": "msg-filter.active", - "label": "全部111", + "label": "全部1191", "href": "", "disabled": false, "active": true, @@ -303,7 +360,7 @@ } }, { - "idx": 16, + "idx": 19, "tag": "button", "role": "", "cls": "msg-filter.", @@ -316,16 +373,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 28, + "mutations": 31, "api": 1 } }, { - "idx": 17, + "idx": 20, "tag": "button", "role": "", "cls": "msg-filter.", - "label": "任务110", + "label": "任务560", "href": "", "disabled": false, "active": false, @@ -334,12 +391,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 6, + "mutations": 8, "api": 1 } }, { - "idx": 18, + "idx": 21, "tag": "button", "role": "", "cls": "msg-filter.", @@ -352,16 +409,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 6, + "mutations": 14, "api": 1 } }, { - "idx": 19, + "idx": 22, "tag": "button", "role": "", "cls": "msg-filter.", - "label": "计费0", + "label": "计费630", "href": "", "disabled": false, "active": false, @@ -370,12 +427,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 6, + "mutations": 10, "api": 1 } }, { - "idx": 20, + "idx": 23, "tag": "button", "role": "", "cls": "msg-filter.", @@ -388,28 +445,10 @@ "url": false, "overlay": false, "self": true, - "mutations": 6, + "mutations": 8, "api": 1 } }, - { - "idx": 21, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 22, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 23, - "label": "", - "tag": "", - "verdict": "stale" - }, { "idx": 24, "label": "", @@ -433,17 +472,51 @@ "label": "", "tag": "", "verdict": "stale" + }, + { + "idx": 28, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 29, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 30, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 31, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 32, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 33, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", - "资产「AI 生成 · image · 1」已加入资产库11mProduct Image · Im", - "资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库26mFinal Video", - "资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库1hFinal Video ", - "资产「南卡 · 痛点种草 · v1-BGM」已加入资产库1hUpload · Audio已完成系", + "余额 ¥14,072.00", + "商品图生成已扣费 ¥2.008mAI 任务扣费 · 扣费后余额 ¥14072.00更新系统", + "资产「AI 生成 · 商品三视图 · 1」已加入资产库8mProduct Image · Ima", + "商品图生成已扣费 ¥2.001dAI 任务扣费 · 扣费后余额 ¥14080.00更新系统", "系统 →" ] } diff --git a/core/qa/function-audit/output/messages.audit.md b/core/qa/function-audit/output/messages.audit.md index 4e8f176..ff79b8e 100644 --- a/core/qa/function-audit/output/messages.audit.md +++ b/core/qa/function-audit/output/messages.audit.md @@ -1,18 +1,16 @@ # 功能审计 · messages 路由:`/messages` · 模式:quick -合计 28 · ✅ works 20 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)7 · ◷ noop-active 1 · ⚪ disabled 0 +合计 34 · ✅ works 23 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)10 · ◷ noop-active 1 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 -- 资产「AI 生成 · image · 1」已加入资产库11mProduct Image · Im -- 资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库26mFinal Video -- 资产「南卡 · 痛点种草 · v1-final.mp4」已加入资产库1hFinal Video -- 资产「南卡 · 痛点种草 · v1-BGM」已加入资产库1hUpload · Audio已完成系 +- 余额 ¥14,072.00 +- 商品图生成已扣费 ¥2.008mAI 任务扣费 · 扣费后余额 ¥14072.00更新系统 +- 资产「AI 生成 · 商品三视图 · 1」已加入资产库8mProduct Image · Ima +- 商品图生成已扣费 ¥2.001dAI 任务扣费 · 扣费后余额 ¥14080.00更新系统 - 系统 → diff --git a/core/qa/function-audit/output/model-photo-demo-a.audit.json b/core/qa/function-audit/output/model-photo-demo-a.audit.json index 1c07fad..a917cde 100644 --- a/core/qa/function-audit/output/model-photo-demo-a.audit.json +++ b/core/qa/function-audit/output/model-photo-demo-a.audit.json @@ -1,11 +1,11 @@ { "name": "model-photo-demo-a", "route": "/model-photo/demo-a", - "url": "http://127.0.0.1:5173/model-photo/demo-a", + "url": "http://127.0.0.1:5174/model-photo/demo-a", "mode": "quick", "tally": { - "total": 38, - "works": 33, + "total": 39, + "works": 34, "dead": 0, "error": 0, "disabled": 0, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 22, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 24, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "active", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 27, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 23, + "api": 2 + } + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "add", @@ -262,16 +316,16 @@ "url": true, "overlay": true, "self": false, - "mutations": 25, + "mutations": 35, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "dm-prod.active", - "label": "主图南卡 Lite Pro 蓝牙耳机// 数码 3C · 6 批", + "label": "主图透真补水面膜// 美妆个护 · 6 批", "href": "", "disabled": false, "active": true, @@ -284,66 +338,12 @@ "api": 0 } }, - { - "idx": 15, - "tag": "button", - "role": "", - "cls": "dm-prod.", - "label": "主图露露同款裸感瑜伽裤// 运动户外 · 3 批", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 11, - "api": 0 - } - }, - { - "idx": 16, - "tag": "button", - "role": "", - "cls": "dm-prod.", - "label": "主图透真清透物理防晒霜// 美妆个护 · 2 批", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 11, - "api": 0 - } - }, - { - "idx": 17, - "tag": "button", - "role": "", - "cls": "dm-prod.", - "label": "主图滋啦速食牛肉面 · 6 桶装// 食品饮料 · 1 批", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 11, - "api": 0 - } - }, { "idx": 18, "tag": "button", "role": "", "cls": "dm-prod.", - "label": "主图透真玻尿酸补水面膜// 美妆个护 · 1 批", + "label": "主图透真清透防晒霜// 美妆个护 · 3 批", "href": "", "disabled": false, "active": false, @@ -361,7 +361,7 @@ "tag": "button", "role": "", "cls": "dm-prod.", - "label": "主图桥接测试补水面膜 20260529// 美妆个护 · 0 批", + "label": "主图南卡 Lite Pro 蓝牙耳机// 数码 3C · 2 批", "href": "", "disabled": false, "active": false, @@ -378,8 +378,62 @@ "idx": 20, "tag": "button", "role": "", + "cls": "dm-prod.", + "label": "主图滋啦速食牛肉面// 食品饮料 · 1 批", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 11, + "api": 0 + } + }, + { + "idx": 21, + "tag": "button", + "role": "", + "cls": "dm-prod.", + "label": "主图三顿半同款冻干咖啡// 食品饮料 · 1 批", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 11, + "api": 0 + } + }, + { + "idx": 22, + "tag": "button", + "role": "", + "cls": "dm-prod.", + "label": "主图小熊 4L 可视空气炸锅// 家居家电 · 0 批", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 11, + "api": 0 + } + }, + { + "idx": 23, + "tag": "button", + "role": "", "cls": "dm-all", - "label": "全部商品8 个", + "label": "全部商品24 个", "href": "", "disabled": false, "active": false, @@ -388,12 +442,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, + "mutations": 27, "api": 0 } }, { - "idx": 21, + "idx": 24, "tag": "button", "role": "", "cls": "dm-back", @@ -406,16 +460,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 22, + "api": 1 + } }, { - "idx": 22, + "idx": 25, "tag": "button", "role": "", "cls": "dm-chip.", @@ -433,7 +483,7 @@ } }, { - "idx": 23, + "idx": 26, "tag": "button", "role": "", "cls": "dm-chip.", @@ -451,7 +501,7 @@ } }, { - "idx": 24, + "idx": 27, "tag": "button", "role": "", "cls": "dm-chip.", @@ -469,7 +519,7 @@ } }, { - "idx": 25, + "idx": 28, "tag": "button", "role": "", "cls": "dm-chip.", @@ -487,7 +537,7 @@ } }, { - "idx": 26, + "idx": 29, "tag": "button", "role": "", "cls": "dm-chip.", @@ -505,7 +555,7 @@ } }, { - "idx": 27, + "idx": 30, "tag": "button", "role": "", "cls": "dm-chip.", @@ -523,7 +573,7 @@ } }, { - "idx": 28, + "idx": 31, "tag": "button", "role": "", "cls": "dm-chip.", @@ -541,7 +591,7 @@ } }, { - "idx": 29, + "idx": 32, "tag": "button", "role": "", "cls": "dm-chip.", @@ -559,7 +609,7 @@ } }, { - "idx": 30, + "idx": 33, "tag": "button", "role": "", "cls": "dm-gen", @@ -569,61 +619,6 @@ "active": false, "verdict": "skipped-destructive" }, - { - "idx": 31, - "tag": "button", - "role": "", - "cls": "", - "label": "全部重跑", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, - { - "idx": 32, - "tag": "button", - "role": "", - "cls": "", - "label": "全部下载", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, - { - "idx": 33, - "tag": "button", - "role": "", - "cls": "", - "label": "加入资产库", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, { "idx": 34, "tag": "button", @@ -649,20 +644,27 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { "idx": 36, "tag": "button", "role": "", "cls": "", - "label": "加入资产库", + "label": "全部重跑", + "href": "", + "disabled": false, + "active": false, + "verdict": "skipped-destructive" + }, + { + "idx": 37, + "tag": "button", + "role": "", + "cls": "", + "label": "全部下载", "href": "", "disabled": false, "active": false, @@ -671,16 +673,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 37, + "idx": 38, "label": "", "tag": "", "verdict": "stale" @@ -689,8 +687,8 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", - "立即生成 · 透真补水面膜 × Ava" + "余额 ¥14,071.00", + "立即生成 · 透真补水面膜 × Ava", + "加入资产库" ] } diff --git a/core/qa/function-audit/output/model-photo-demo-a.audit.md b/core/qa/function-audit/output/model-photo-demo-a.audit.md index f7cb70c..090d201 100644 --- a/core/qa/function-audit/output/model-photo-demo-a.audit.md +++ b/core/qa/function-audit/output/model-photo-demo-a.audit.md @@ -1,16 +1,16 @@ # 功能审计 · model-photo-demo-a 路由:`/model-photo/demo-a` · 模式:quick -合计 38 · ✅ works 33 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)4 · ◷ noop-active 1 · ⚪ disabled 0 +合计 39 · ✅ works 34 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)4 · ◷ noop-active 1 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,071.00 - 立即生成 · 透真补水面膜 × Ava +- 加入资产库 ## ⏭ 破坏性按钮(未自动点,需人工验) - 立即生成 · 南卡 Lite Pro 蓝牙耳机 × Ava `button` diff --git a/core/qa/function-audit/output/model-photo-demo-b.audit.json b/core/qa/function-audit/output/model-photo-demo-b.audit.json index a5aac48..75bd87d 100644 --- a/core/qa/function-audit/output/model-photo-demo-b.audit.json +++ b/core/qa/function-audit/output/model-photo-demo-b.audit.json @@ -1,16 +1,16 @@ { "name": "model-photo-demo-b", "route": "/model-photo/demo-b", - "url": "http://127.0.0.1:5173/model-photo/demo-b", + "url": "http://127.0.0.1:5174/model-photo/demo-b", "mode": "quick", "tally": { - "total": 37, - "works": 34, + "total": 38, + "works": 36, "dead": 0, "error": 0, "disabled": 0, "skipped": 2, - "noop": 1, + "noop": 0, "blocked": 0 }, "results": [ @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 22, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 24, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "active", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 27, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 23, + "api": 2 + } + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 36, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "add", @@ -262,12 +316,12 @@ "url": true, "overlay": true, "self": false, - "mutations": 26, + "mutations": 42, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "dm-prod.active", @@ -275,17 +329,17 @@ "href": "", "disabled": false, "active": true, - "verdict": "noop-active", + "verdict": "works", "signals": { "url": false, "overlay": false, "self": false, - "mutations": 0, + "mutations": 3, "api": 0 } }, { - "idx": 15, + "idx": 18, "tag": "button", "role": "", "cls": "dm-prod.", @@ -302,66 +356,30 @@ "api": 0 } }, - { - "idx": 16, - "tag": "button", - "role": "", - "cls": "dm-prod.", - "label": "主图透真清透物理防晒霜// 美妆个护 · 2 批", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 8, - "api": 0 - } - }, - { - "idx": 17, - "tag": "button", - "role": "", - "cls": "dm-prod.", - "label": "主图滋啦速食牛肉面 · 6 桶装// 食品饮料 · 1 批", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 8, - "api": 0 - } - }, - { - "idx": 18, - "tag": "button", - "role": "", - "cls": "dm-prod.", - "label": "主图透真玻尿酸补水面膜// 美妆个护 · 1 批", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 8, - "api": 0 - } - }, { "idx": 19, "tag": "button", "role": "", "cls": "dm-prod.", - "label": "主图桥接测试补水面膜 20260529// 美妆个护 · 0 批", + "label": "主图测试// 美妆个护 · 2 批", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 8, + "api": 0 + } + }, + { + "idx": 20, + "tag": "button", + "role": "", + "cls": "dm-prod.", + "label": "主图透真清透物理防晒霜// 美妆个护 · 1 批", "href": "", "disabled": false, "active": false, @@ -375,11 +393,47 @@ } }, { - "idx": 20, + "idx": 21, + "tag": "button", + "role": "", + "cls": "dm-prod.", + "label": "主图耳机包// 数码 3C · 1 批", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 8, + "api": 0 + } + }, + { + "idx": 22, + "tag": "button", + "role": "", + "cls": "dm-prod.", + "label": "主图Apple/苹果 iPhone 17 Pro// 数码 3C · 0 批", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 7, + "api": 0 + } + }, + { + "idx": 23, "tag": "button", "role": "", "cls": "dm-all", - "label": "全部商品8 个", + "label": "全部商品17 个", "href": "", "disabled": false, "active": false, @@ -388,12 +442,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, + "mutations": 34, "api": 0 } }, { - "idx": 21, + "idx": 24, "tag": "button", "role": "", "cls": "dm-back", @@ -406,16 +460,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 22, + "idx": 25, "tag": "button", "role": "", "cls": "icbtn", @@ -428,16 +478,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 23, + "idx": 26, "tag": "button", "role": "", "cls": "chip", @@ -450,16 +496,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 24, + "idx": 27, "tag": "button", "role": "", "cls": "chip", @@ -472,16 +514,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 25, + "idx": 28, "tag": "button", "role": "", "cls": "chip", @@ -494,68 +532,9 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, - { - "idx": 26, - "tag": "button", - "role": "", - "cls": "", - "label": "全部重跑", - "href": "", - "disabled": false, - "active": false, - "verdict": "skipped-destructive" - }, - { - "idx": 27, - "tag": "button", - "role": "", - "cls": "", - "label": "全部下载", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, - { - "idx": 28, - "tag": "button", - "role": "", - "cls": "", - "label": "加入资产库", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { "idx": 29, @@ -582,20 +561,27 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 75, + "api": 2 + } }, { "idx": 31, "tag": "button", "role": "", "cls": "", - "label": "加入资产库", + "label": "全部重跑", + "href": "", + "disabled": false, + "active": false, + "verdict": "skipped-destructive" + }, + { + "idx": 32, + "tag": "button", + "role": "", + "cls": "", + "label": "全部下载", "href": "", "disabled": false, "active": false, @@ -604,16 +590,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 32, + "idx": 33, "tag": "button", "role": "", "cls": "pchip.active", @@ -626,16 +608,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 32, + "api": 2 + } }, { - "idx": 33, + "idx": 34, "tag": "button", "role": "", "cls": "pchip", @@ -648,16 +626,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 75, + "api": 2 + } }, { - "idx": 34, + "idx": 35, "tag": "button", "role": "", "cls": "pchip", @@ -670,16 +644,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 75, + "api": 2 + } }, { - "idx": 35, + "idx": 36, "tag": "button", "role": "", "cls": "pchip", @@ -692,16 +662,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 75, + "api": 2 + } }, { - "idx": 36, + "idx": 37, "tag": "button", "role": "", "cls": "gen-btn", @@ -714,20 +680,16 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 75, + "api": 2 + } } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,071.00", + "加入资产库", "生成 · 透真补水面膜 × Ava" ] } diff --git a/core/qa/function-audit/output/model-photo-demo-b.audit.md b/core/qa/function-audit/output/model-photo-demo-b.audit.md index 37ddc59..25b1f47 100644 --- a/core/qa/function-audit/output/model-photo-demo-b.audit.md +++ b/core/qa/function-audit/output/model-photo-demo-b.audit.md @@ -1,15 +1,15 @@ # 功能审计 · model-photo-demo-b 路由:`/model-photo/demo-b` · 模式:quick -合计 37 · ✅ works 34 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 1 · ⚪ disabled 0 +合计 38 · ✅ works 36 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)2 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,071.00 +- 加入资产库 - 生成 · 透真补水面膜 × Ava ## ⏭ 破坏性按钮(未自动点,需人工验) diff --git a/core/qa/function-audit/output/model-photo.audit.json b/core/qa/function-audit/output/model-photo.audit.json index 091dd98..a6c1cd3 100644 --- a/core/qa/function-audit/output/model-photo.audit.json +++ b/core/qa/function-audit/output/model-photo.audit.json @@ -1,16 +1,16 @@ { "name": "model-photo", "route": "/model-photo", - "url": "http://127.0.0.1:5173/model-photo", + "url": "http://127.0.0.1:5174/model-photo", "mode": "quick", "tally": { - "total": 32, - "works": 31, + "total": 49, + "works": 44, "dead": 0, "error": 0, "disabled": 0, - "skipped": 0, - "noop": 1, + "skipped": 5, + "noop": 0, "blocked": 0 }, "results": [ @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 22, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 24, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "active", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 69, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 23, + "api": 2 + } + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,16 +298,34 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", - "cls": "back-pill", - "label": "返回", + "cls": "iw-side-toggle", + "label": "收起商品栏", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 6, + "api": 0 + } + }, + { + "idx": 17, + "tag": "button", + "role": "", + "cls": "search-btn", + "label": "搜索批次/模特", "href": "", "disabled": false, "active": false, @@ -262,12 +334,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 3 } }, { - "idx": 14, + "idx": 18, "tag": "button", "role": "", "cls": "new-prod", @@ -280,100 +352,16 @@ "url": true, "overlay": true, "self": false, - "mutations": 25, + "mutations": 35, "api": 0 } }, - { - "idx": 15, - "tag": "button", - "role": "", - "cls": "iw-prod-item.active", - "label": "南卡南卡 Lite Pro 蓝牙耳机// 数码 3C", - "href": "", - "disabled": false, - "active": true, - "verdict": "noop-active", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 16, - "tag": "button", - "role": "", - "cls": "iw-prod-item.", - "label": "露露露露同款裸感瑜伽裤// 运动户外", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, - { - "idx": 17, - "tag": "button", - "role": "", - "cls": "iw-prod-item.", - "label": "透真透真清透物理防晒霜// 美妆个护", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, - { - "idx": 18, - "tag": "button", - "role": "", - "cls": "iw-prod-item.", - "label": "滋啦滋啦速食牛肉面 · 6 桶装// 食品饮料", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] - }, { "idx": 19, "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "透真透真玻尿酸补水面膜// 美妆个护", + "label": "南卡 Lite Pro 蓝牙耳机数码 3C", "href": "", "disabled": false, "active": false, @@ -382,8 +370,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 49, + "api": 1 }, "consoleNote": [ "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", @@ -395,7 +383,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "桥接桥接测试补水面膜 20260529// 美妆个护", + "label": "露露同款裸感瑜伽裤运动户外", "href": "", "disabled": false, "active": false, @@ -404,8 +392,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 52, + "api": 1 }, "consoleNote": [ "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", @@ -417,7 +405,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "三顿三顿半同款冻干咖啡粉// 食品饮料", + "label": "测试美妆个护", "href": "", "disabled": false, "active": false, @@ -426,8 +414,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 28, + "api": 1 }, "consoleNote": [ "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", @@ -439,7 +427,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "小熊小熊 4L 可视空气炸锅// 家居家电", + "label": "透真清透物理防晒霜美妆个护", "href": "", "disabled": false, "active": false, @@ -448,8 +436,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 28, + "api": 1 }, "consoleNote": [ "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", @@ -460,6 +448,182 @@ "idx": 23, "tag": "button", "role": "", + "cls": "iw-prod-item.", + "label": "耳机包数码 3C", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 26, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 24, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "Apple/苹果 iPhone 17 Pro数码 3C", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 25, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "滋啦速食牛肉面 · 6 桶装食品饮料", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 26, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "滋啦速食牛肉面 · 6 桶装食品饮料", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 25, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 27, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "植护24大包抽纸家用实惠装整箱面巾卫生餐巾纸巾悬挂式擦手面纸抽个护清洁", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 28, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "透真玻尿酸补水面膜美妆个护", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 26, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 29, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "测试美妆个护", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 30, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "桥接测试补水面膜 20260529美妆个护", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 31, + "tag": "button", + "role": "", "cls": "search-btn", "label": "搜索批次/模特", "href": "", @@ -470,7 +634,7 @@ "url": false, "overlay": false, "self": true, - "mutations": 6, + "mutations": 4, "api": 0 }, "consoleNote": [ @@ -479,7 +643,7 @@ ] }, { - "idx": 24, + "idx": 32, "tag": "button", "role": "", "cls": "tb-chip", @@ -501,7 +665,7 @@ ] }, { - "idx": 25, + "idx": 33, "tag": "div", "role": "button", "cls": "mi.selected", @@ -523,11 +687,11 @@ ] }, { - "idx": 26, + "idx": 34, "tag": "button", "role": "", - "cls": "model-card.", - "label": "南卡 · 痛点种草 · v1-person// 真人模特", + "cls": "iw-actor-lib-btn", + "label": "模特库", "href": "", "disabled": false, "active": false, @@ -536,7 +700,7 @@ "url": false, "overlay": false, "self": true, - "mutations": 22, + "mutations": 11, "api": 0 }, "consoleNote": [ @@ -545,11 +709,11 @@ ] }, { - "idx": 27, - "tag": "button", - "role": "", - "cls": "model-card.", - "label": "AI 生成 · model · 1// 真人模特", + "idx": 35, + "tag": "span", + "role": "button", + "cls": "right", + "label": "全部 (14)", "href": "", "disabled": false, "active": false, @@ -557,8 +721,8 @@ "signals": { "url": false, "overlay": false, - "self": true, - "mutations": 5, + "self": false, + "mutations": 21, "api": 0 }, "consoleNote": [ @@ -567,11 +731,11 @@ ] }, { - "idx": 28, + "idx": 36, "tag": "button", "role": "", "cls": "model-card.", - "label": "AI 生成 · model · 1// 真人模特", + "label": "AI 生成", "href": "", "disabled": false, "active": false, @@ -580,7 +744,7 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 }, "consoleNote": [ @@ -589,11 +753,11 @@ ] }, { - "idx": 29, + "idx": 37, "tag": "button", "role": "", "cls": "model-card.", - "label": "AI 生成 · model · 2// 真人模特", + "label": "AI 生成", "href": "", "disabled": false, "active": false, @@ -602,7 +766,7 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 }, "consoleNote": [ @@ -611,11 +775,11 @@ ] }, { - "idx": 30, + "idx": 38, "tag": "button", "role": "", "cls": "model-card.", - "label": "AI 生成 · model · 2// 真人模特", + "label": "Apple/苹果", "href": "", "disabled": false, "active": false, @@ -624,7 +788,7 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 }, "consoleNote": [ @@ -633,11 +797,11 @@ ] }, { - "idx": 31, + "idx": 39, "tag": "button", "role": "", "cls": "model-card.", - "label": "AI 生成 · model · 2// 真人模特", + "label": "Apple/苹果", "href": "", "disabled": false, "active": false, @@ -646,20 +810,137 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 }, "consoleNote": [ "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " ] + }, + { + "idx": 40, + "tag": "button", + "role": "", + "cls": "model-card.", + "label": "Apple/苹果 · 短视频 · v1", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 6, + "api": 0 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 41, + "tag": "button", + "role": "", + "cls": "model-card.", + "label": "OPPO手机 · 短视频 · v1", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 6, + "api": 0 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 42, + "tag": "button", + "role": "", + "cls": "model-card.", + "label": "南卡 · 痛点种草 · v3", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 6, + "api": 0 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 43, + "tag": "button", + "role": "", + "cls": "model-card.", + "label": "南卡 · 短视频 · v5", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 6, + "api": 0 + }, + "consoleNote": [ + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", + "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " + ] + }, + { + "idx": 44, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 45, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 46, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 47, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 48, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,071.00", "折叠侧栏", "全部商品 7 个", "时间", diff --git a/core/qa/function-audit/output/model-photo.audit.md b/core/qa/function-audit/output/model-photo.audit.md index 9dbc952..9dc4236 100644 --- a/core/qa/function-audit/output/model-photo.audit.md +++ b/core/qa/function-audit/output/model-photo.audit.md @@ -1,15 +1,14 @@ # 功能审计 · model-photo 路由:`/model-photo` · 模式:quick -合计 32 · ✅ works 31 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 0 +合计 49 · ✅ works 44 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,071.00 - 折叠侧栏 - 全部商品 7 个 - 时间 diff --git a/core/qa/function-audit/output/perf-report.json b/core/qa/function-audit/output/perf-report.json index 05721b6..65683d0 100644 --- a/core/qa/function-audit/output/perf-report.json +++ b/core/qa/function-audit/output/perf-report.json @@ -1,45 +1,45 @@ { - "ts": "2026-06-17T13:32:23.263Z", + "ts": "2026-07-02T03:02:30.918Z", "base": "http://127.0.0.1:5174", "apiChecks": [ { "name": "page_size 生效 /api/assets/", "pass": true, - "detail": "count=261 返回=200 next=有" + "detail": "count=428 返回=200 next=有" }, { "name": "page_size 生效 /api/products/", "pass": true, - "detail": "count=11 返回=11 next=无" + "detail": "count=17 返回=17 next=无" }, { "name": "page_size 生效 /api/projects/", "pass": true, - "detail": "count=21 返回=21 next=无" + "detail": "count=39 返回=39 next=无" }, { "name": "延迟 /api/assets/?page_size=200", "pass": true, "soft": true, - "detail": "808ms / 参考 1200ms (HTTP 200)" + "detail": "754ms / 参考 1200ms (HTTP 200)" }, { "name": "延迟 /api/products/?page_size=200", "pass": true, "soft": true, - "detail": "585ms / 参考 1200ms (HTTP 200)" + "detail": "569ms / 参考 1200ms (HTTP 200)" }, { "name": "延迟 /api/projects/?page_size=200", "pass": true, "soft": true, - "detail": "488ms / 参考 1200ms (HTTP 200)" + "detail": "580ms / 参考 1200ms (HTTP 200)" }, { "name": "延迟 /api/ops/notifications/?page_size=100", "pass": false, "soft": true, - "detail": "1233ms / 参考 1200ms (HTTP 200)" + "detail": "1474ms / 参考 1200ms (HTTP 200)" } ], "pageFailed": 0, @@ -49,128 +49,6 @@ "route": "http://127.0.0.1:5174/dashboard", "unique": 6, "budget": 7, - "rawRequests": 7, - "waterfall": 0, - "duplicates": [], - "failed": [], - "breakdown": [ - "GET /api/auth/me/", - "GET /api/products/", - "GET /api/projects/", - "GET /api/billing/summary/", - "GET /api/ai/models/", - "GET /api/ops/notifications/?page_size=1", - "GET /api/assets/summary/" - ], - "elapsedMs": 4223, - "problems": [], - "warnings": [], - "pass": true - }, - { - "name": "products", - "route": "http://127.0.0.1:5174/products", - "unique": 5, - "budget": 6, - "rawRequests": 6, - "waterfall": 0, - "duplicates": [], - "failed": [], - "breakdown": [ - "GET /api/auth/me/", - "GET /api/products/", - "GET /api/projects/", - "GET /api/billing/summary/", - "GET /api/ai/models/", - "GET /api/ops/notifications/?page_size=1" - ], - "elapsedMs": 3760, - "problems": [], - "warnings": [], - "pass": true - }, - { - "name": "projects", - "route": "http://127.0.0.1:5174/projects", - "unique": 5, - "budget": 6, - "rawRequests": 6, - "waterfall": 0, - "duplicates": [], - "failed": [], - "breakdown": [ - "GET /api/auth/me/", - "GET /api/products/", - "GET /api/projects/", - "GET /api/billing/summary/", - "GET /api/ai/models/", - "GET /api/ops/notifications/?page_size=1" - ], - "elapsedMs": 3509, - "problems": [], - "warnings": [], - "pass": true - }, - { - "name": "library", - "route": "http://127.0.0.1:5174/library", - "unique": 8, - "budget": 9, - "rawRequests": 10, - "waterfall": 0, - "duplicates": [ - { - "key": "GET /api/assets/?ordering=-created_at&page=1&page_size=10&tab=people", - "n": 2 - } - ], - "failed": [], - "breakdown": [ - "GET /api/assets/?ordering=-created_at&page=1&page_size=10&tab=people ×2", - "GET /api/auth/me/", - "GET /api/products/", - "GET /api/projects/", - "GET /api/billing/summary/", - "GET /api/ai/models/", - "GET /api/ops/notifications/?page_size=1", - "GET /api/assets/summary/", - "GET /api/assets/facets/?meta_keys=gender,age,role&tab=people" - ], - "elapsedMs": 3494, - "problems": [], - "warnings": [], - "pass": true - }, - { - "name": "account", - "route": "http://127.0.0.1:5174/account", - "unique": 8, - "budget": 9, - "rawRequests": 9, - "waterfall": 0, - "duplicates": [], - "failed": [], - "breakdown": [ - "GET /api/auth/me/", - "GET /api/products/", - "GET /api/projects/", - "GET /api/billing/summary/", - "GET /api/ai/models/", - "GET /api/ops/notifications/?page_size=1", - "GET /api/billing/trend/", - "GET /api/auth/team/members/", - "GET /api/billing/ledgers/?page=1&page_size=10" - ], - "elapsedMs": 3728, - "problems": [], - "warnings": [], - "pass": true - }, - { - "name": "team", - "route": "http://127.0.0.1:5174/team", - "unique": 6, - "budget": 7, "rawRequests": 8, "waterfall": 0, "duplicates": [], @@ -182,17 +60,17 @@ "GET /api/billing/summary/", "GET /api/ai/models/", "GET /api/ops/notifications/?page_size=1", - "GET /api/auth/team/members/", - "GET /api/ops/notifications/?page_size=100" + "GET /api/assets/summary/", + "GET /api/ai/tasks/unread/" ], - "elapsedMs": 3729, + "elapsedMs": 3773, "problems": [], "warnings": [], "pass": true }, { - "name": "messages", - "route": "http://127.0.0.1:5174/messages", + "name": "products", + "route": "http://127.0.0.1:5174/products", "unique": 5, "budget": 6, "rawRequests": 7, @@ -206,18 +84,18 @@ "GET /api/billing/summary/", "GET /api/ai/models/", "GET /api/ops/notifications/?page_size=1", - "GET /api/ops/notifications/?page=1&page_size=10" + "GET /api/ai/tasks/unread/" ], - "elapsedMs": 3693, + "elapsedMs": 3714, "problems": [], "warnings": [], "pass": true }, { - "name": "productDetail", - "route": "http://127.0.0.1:5174/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f", - "unique": 6, - "budget": 7, + "name": "projects", + "route": "http://127.0.0.1:5174/projects", + "unique": 5, + "budget": 6, "rawRequests": 7, "waterfall": 0, "duplicates": [], @@ -229,35 +107,178 @@ "GET /api/billing/summary/", "GET /api/ai/models/", "GET /api/ops/notifications/?page_size=1", - "GET /api/assets/?page_size=200&product=045ad8d6-8b15-486b-a4a9-f6968eb1555f" + "GET /api/ai/tasks/unread/" ], - "elapsedMs": 4730, + "elapsedMs": 4631, "problems": [], "warnings": [], "pass": true }, { - "name": "pipeline", - "route": "http://127.0.0.1:5174/pipeline/46754596-a6f5-4f07-a85f-92a2415910ff", - "unique": 6, - "budget": 8, - "rawRequests": 7, + "name": "library", + "route": "http://127.0.0.1:5174/library", + "unique": 9, + "budget": 9, + "rawRequests": 12, + "waterfall": 0, + "duplicates": [ + { + "key": "GET /api/assets/batches/?ordering=-created_at&page=1&page_size=10&tab=tryon", + "n": 2 + } + ], + "failed": [], + "breakdown": [ + "GET /api/assets/batches/?ordering=-created_at&page=1&page_size=10&tab=tryon ×2", + "GET /api/auth/me/", + "GET /api/products/", + "GET /api/projects/", + "GET /api/billing/summary/", + "GET /api/ai/models/", + "GET /api/ops/notifications/?page_size=1", + "GET /api/assets/summary/", + "GET /api/assets/video-packs/", + "GET /api/assets/facets/?meta_keys=product&tab=tryon", + "GET /api/ai/tasks/unread/" + ], + "elapsedMs": 3738, + "problems": [], + "warnings": [], + "pass": true + }, + { + "name": "account", + "route": "http://127.0.0.1:5174/account", + "unique": 9, + "budget": 9, + "rawRequests": 11, "waterfall": 0, "duplicates": [], "failed": [], "breakdown": [ "GET /api/auth/me/", - "GET /api/projects/46754596-a6f5-4f07-a85f-92a2415910ff/", "GET /api/products/", "GET /api/projects/", "GET /api/billing/summary/", "GET /api/ai/models/", - "GET /api/ops/notifications/?page_size=1" + "GET /api/ops/notifications/?page_size=1", + "GET /api/billing/trend/", + "GET /api/auth/team/members/", + "GET /api/auth/team/settings/", + "GET /api/billing/ledgers/?page=1&page_size=10", + "GET /api/ai/tasks/unread/" ], - "elapsedMs": 3737, + "elapsedMs": 3917, "problems": [], "warnings": [], "pass": true + }, + { + "name": "team", + "route": "http://127.0.0.1:5174/team", + "unique": 7, + "budget": 7, + "rawRequests": 10, + "waterfall": 0, + "duplicates": [], + "failed": [], + "breakdown": [ + "GET /api/auth/me/", + "GET /api/products/", + "GET /api/projects/", + "GET /api/billing/summary/", + "GET /api/ai/models/", + "GET /api/ops/notifications/?page_size=1", + "GET /api/auth/team/members/", + "GET /api/ops/notifications/?page_size=100", + "GET /api/auth/team/settings/", + "GET /api/ai/tasks/unread/" + ], + "elapsedMs": 3706, + "problems": [], + "warnings": [], + "pass": true + }, + { + "name": "messages", + "route": "http://127.0.0.1:5174/messages", + "unique": 5, + "budget": 6, + "rawRequests": 8, + "waterfall": 0, + "duplicates": [], + "failed": [], + "breakdown": [ + "GET /api/auth/me/", + "GET /api/products/", + "GET /api/projects/", + "GET /api/billing/summary/", + "GET /api/ai/models/", + "GET /api/ops/notifications/?page_size=1", + "GET /api/ops/notifications/?page=1&page_size=10", + "GET /api/ai/tasks/unread/" + ], + "elapsedMs": 4048, + "problems": [], + "warnings": [], + "pass": true + }, + { + "name": "productDetail", + "route": "http://127.0.0.1:5174/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f", + "unique": 8, + "budget": 7, + "rawRequests": 10, + "waterfall": 0, + "duplicates": [], + "failed": [], + "breakdown": [ + "GET /api/auth/me/", + "GET /api/products/", + "GET /api/projects/", + "GET /api/billing/summary/", + "GET /api/ai/models/", + "GET /api/ops/notifications/?page_size=1", + "GET /api/ai/tasks/unread/", + "GET /api/assets/?page_size=200&product=045ad8d6-8b15-486b-a4a9-f6968eb1555f", + "GET /api/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f/materials/", + "GET /api/assets/?asset_type=image&in_library=all&page_size=200&product=045ad8d6-8b15-486b-a4a9-f6968eb1555f" + ], + "elapsedMs": 4447, + "problems": [], + "warnings": [ + "首屏接口数 8 > 预算 7(架构性过量拉取,待决策)" + ], + "pass": true + }, + { + "name": "pipeline", + "route": "http://127.0.0.1:5174/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0", + "unique": 9, + "budget": 8, + "rawRequests": 11, + "waterfall": 0, + "duplicates": [], + "failed": [], + "breakdown": [ + "GET /api/auth/me/", + "GET /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/", + "GET /api/products/", + "GET /api/projects/", + "GET /api/billing/summary/", + "GET /api/ai/models/", + "GET /api/ops/notifications/?page_size=1", + "GET /api/ai/tasks/unread/", + "POST /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/poll-reviews/", + "GET /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/pending-assets/", + "GET /api/projects/cb82b6ee-c106-4380-b7d5-979c4b9c19a0/extract-status/" + ], + "elapsedMs": 5214, + "problems": [], + "warnings": [ + "首屏接口数 9 > 预算 8(架构性过量拉取,待决策)" + ], + "pass": true } ] } \ No newline at end of file diff --git a/core/qa/function-audit/output/pipeline.audit.json b/core/qa/function-audit/output/pipeline.audit.json index d4c1625..559c9c0 100644 --- a/core/qa/function-audit/output/pipeline.audit.json +++ b/core/qa/function-audit/output/pipeline.audit.json @@ -1,15 +1,15 @@ { "name": "pipeline", - "route": "/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f", - "url": "http://127.0.0.1:5173/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f", + "route": "/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0", + "url": "http://127.0.0.1:5173/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0", "mode": "quick", "tally": { - "total": 34, - "works": 26, + "total": 35, + "works": 21, "dead": 0, "error": 0, - "disabled": 8, - "skipped": 0, + "disabled": 2, + "skipped": 12, "noop": 0, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 52, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, - "api": 0 + "mutations": 40, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": false, - "mutations": 36, + "mutations": 43, "api": 0 } }, @@ -108,81 +108,9 @@ "idx": 5, "tag": "a", "role": "", - "cls": "active", - "label": "视频项目", - "href": "/projects", - "disabled": false, - "active": true, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 22, - "api": 0 - } - }, - { - "idx": 6, - "tag": "a", - "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 26, - "api": 0 - } - }, - { - "idx": 7, - "tag": "a", - "role": "", - "cls": "", - "label": "资产库", - "href": "/library", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 37, - "api": 0 - } - }, - { - "idx": 8, - "tag": "a", - "role": "", - "cls": "", - "label": "团队", - "href": "/team", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": false, - "mutations": 22, - "api": 0 - } - }, - { - "idx": 9, - "tag": "a", - "role": "", - "cls": "", - "label": "消费", - "href": "/account", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -194,11 +122,119 @@ "api": 1 } }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "active", + "label": "视频项目", + "href": "/projects", + "disabled": false, + "active": true, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 0 + } + }, + { + "idx": 7, + "tag": "a", + "role": "", + "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 4 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", + "label": "资产库", + "href": "/library", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 38, + "api": 5 + } + }, + { + "idx": 9, + "tag": "a", + "role": "", + "cls": "", + "label": "团队", + "href": "/team", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 3 + } + }, { "idx": 10, "tag": "a", "role": "", "cls": "", + "label": "消费", + "href": "/account", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 108, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 25, + "api": 1 + } + }, + { + "idx": 12, + "tag": "a", + "role": "", + "cls": "", "label": "设置", "href": "/settings", "disabled": false, @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": false, - "mutations": 56, + "mutations": 61, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "btn.btn-ghost.pipeline-back", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, + "mutations": 24, "api": 0 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, + "mutations": 27, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "a", "role": "", "cls": "sp-dot.done", @@ -262,12 +316,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 24, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "a", "role": "", "cls": "sp-dot", @@ -280,12 +334,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 0 + "mutations": 26, + "api": 3 } }, { - "idx": 15, + "idx": 18, "tag": "a", "role": "", "cls": "sp-dot", @@ -298,12 +352,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 23, - "api": 0 + "mutations": 26, + "api": 1 } }, { - "idx": 16, + "idx": 19, "tag": "a", "role": "", "cls": "sp-dot", @@ -316,67 +370,27 @@ "url": true, "overlay": false, "self": true, - "mutations": 23, - "api": 0 - } - }, - { - "idx": 17, - "tag": "a", - "role": "", - "cls": "sp-dot", - "label": "拼接导出", - "href": "#stage-5", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 23, + "mutations": 25, "api": 1 } }, - { - "idx": 18, - "tag": "button", - "role": "", - "cls": "ctl-btn", - "label": "上一帧 (←)", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" - }, - { - "idx": 19, - "tag": "button", - "role": "", - "cls": "ctl-btn", - "label": "播放 / 暂停 (空格)", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" - }, { "idx": 20, "tag": "button", "role": "", - "cls": "ctl-btn", - "label": "下一帧 (→)", + "cls": "btn.btn-sm.btn-primary", + "label": "▶ 开始生成视频", "href": "", - "disabled": true, + "disabled": false, "active": false, - "verdict": "disabled" + "verdict": "skipped-destructive" }, { "idx": 21, "tag": "button", "role": "", - "cls": "ctl-btn", - "label": "静音", + "cls": "btn.btn-sm", + "label": "把所有已完成视频片段打包下载", "href": "", "disabled": true, "active": false, @@ -386,62 +400,41 @@ "idx": 22, "tag": "div", "role": "button", - "cls": "active", - "label": "字幕", + "cls": "placeholder.video-thumb", + "label": "点击查看详情(历史版本/提示词/重跑)", "href": "", "disabled": false, - "active": true, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 61, - "api": 0 - } + "active": false, + "verdict": "skipped-destructive" }, { "idx": 23, - "tag": "div", - "role": "button", - "cls": "", - "label": "转场", + "tag": "button", + "role": "", + "cls": "btn.btn-ghost.btn-sm", + "label": "重跑", "href": "", "disabled": false, "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 33, - "api": 0 - } + "verdict": "skipped-destructive" }, { "idx": 24, - "tag": "div", - "role": "button", - "cls": "", - "label": "BGM", + "tag": "button", + "role": "", + "cls": "btn.btn-ghost.btn-sm", + "label": "下载", "href": "", - "disabled": false, + "disabled": true, "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 35, - "api": 0 - } + "verdict": "disabled" }, { "idx": 25, "tag": "button", "role": "", - "cls": "btn.btn-sm.btn-primary", - "label": "已开启", + "cls": "btn", + "label": "返回故事板", "href": "", "disabled": false, "active": false, @@ -450,132 +443,70 @@ "url": false, "overlay": false, "self": false, - "mutations": 30, - "api": 0 + "mutations": 35, + "api": 1 } }, { "idx": 26, - "tag": "div", - "role": "button", - "cls": "swatch-card.selected", - "label": "真实分享朴素白底", - "href": "", - "disabled": false, - "active": true, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 35, - "api": 0 - } + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 27, - "tag": "div", - "role": "button", - "cls": "swatch-card", - "label": "真实分享影视黑底", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 30, - "api": 0 - } + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 28, - "tag": "div", - "role": "button", - "cls": "swatch-card", - "label": "真实分享手写描边", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 35, - "api": 0 - } + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 29, - "tag": "div", - "role": "button", - "cls": "swatch-card", - "label": "真实分享综艺暖黄", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 36, - "api": 0 - } + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 30, - "tag": "button", - "role": "", - "cls": "tl-action", - "label": "撤销", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 31, - "tag": "button", - "role": "", - "cls": "tl-action", - "label": "重做", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 32, - "tag": "button", - "role": "", - "cls": "tl-action", - "label": "在播放头处分割所在片段", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 33, - "tag": "button", - "role": "", - "cls": "tl-action", - "label": "复制选中片段", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 34, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,072.00", + "拼接导出", "添加人物", "添加场景", "↻ 整体重写", diff --git a/core/qa/function-audit/output/pipeline.audit.md b/core/qa/function-audit/output/pipeline.audit.md index 305ade8..010c48c 100644 --- a/core/qa/function-audit/output/pipeline.audit.md +++ b/core/qa/function-audit/output/pipeline.audit.md @@ -1,15 +1,15 @@ # 功能审计 · pipeline -路由:`/pipeline/1048451e-3b4a-4b66-a8f4-cb865096de2f` · 模式:quick -合计 34 · ✅ works 26 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 8 +路由:`/pipeline/cb82b6ee-c106-4380-b7d5-979c4b9c19a0` · 模式:quick +合计 35 · ✅ works 21 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)12 · ◷ noop-active 0 · ⚪ disabled 2 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 +- 拼接导出 - 添加人物 - 添加场景 - ↻ 整体重写 @@ -22,3 +22,8 @@ - 重新生成全部 - 确认脚本,进入下一步 +## ⏭ 破坏性按钮(未自动点,需人工验) +- ▶ 开始生成视频 `button` +- 点击查看详情(历史版本/提示词/重跑) `div` +- 重跑 `button` + diff --git a/core/qa/function-audit/output/platform-cover.audit.json b/core/qa/function-audit/output/platform-cover.audit.json index c4922ba..4f32e44 100644 --- a/core/qa/function-audit/output/platform-cover.audit.json +++ b/core/qa/function-audit/output/platform-cover.audit.json @@ -1,16 +1,16 @@ { "name": "platform-cover", "route": "/platform-cover", - "url": "http://127.0.0.1:5173/platform-cover", + "url": "http://127.0.0.1:5174/platform-cover", "mode": "quick", "tally": { - "total": 38, - "works": 35, + "total": 48, + "works": 46, "dead": 0, "error": 0, - "disabled": 0, - "skipped": 1, - "noop": 2, + "disabled": 1, + "skipped": 0, + "noop": 1, "blocked": 0 }, "results": [ @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 15, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 22, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 24, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "active", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 41, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 37, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 108, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 23, + "api": 2 + } + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,16 +298,34 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", - "cls": "back-pill", - "label": "返回", + "cls": "iw-side-toggle", + "label": "收起商品栏", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 6, + "api": 0 + } + }, + { + "idx": 17, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "南卡 Lite Pro 蓝牙耳机数码 3C", "href": "", "disabled": false, "active": false, @@ -262,12 +334,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 4 } }, { - "idx": 14, + "idx": 18, "tag": "button", "role": "", "cls": "new-prod", @@ -280,79 +352,7 @@ "url": true, "overlay": true, "self": false, - "mutations": 26, - "api": 0 - } - }, - { - "idx": 15, - "tag": "button", - "role": "", - "cls": "iw-prod-item.active", - "label": "南卡南卡 Lite Pro 蓝牙耳机// 数码 3C", - "href": "", - "disabled": false, - "active": true, - "verdict": "noop-active", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 16, - "tag": "button", - "role": "", - "cls": "iw-prod-item.", - "label": "露露露露同款裸感瑜伽裤// 运动户外", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - } - }, - { - "idx": 17, - "tag": "button", - "role": "", - "cls": "iw-prod-item.", - "label": "透真透真清透物理防晒霜// 美妆个护", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, - "api": 0 - } - }, - { - "idx": 18, - "tag": "button", - "role": "", - "cls": "iw-prod-item.", - "label": "滋啦滋啦速食牛肉面 · 6 桶装// 食品饮料", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 7, + "mutations": 42, "api": 0 } }, @@ -361,7 +361,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "透真透真玻尿酸补水面膜// 美妆个护", + "label": "南卡 Lite Pro 蓝牙耳机数码 3C", "href": "", "disabled": false, "active": false, @@ -370,8 +370,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 51, + "api": 1 } }, { @@ -379,7 +379,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "桥接桥接测试补水面膜 20260529// 美妆个护", + "label": "露露同款裸感瑜伽裤运动户外", "href": "", "disabled": false, "active": false, @@ -388,8 +388,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 51, + "api": 1 } }, { @@ -397,7 +397,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "三顿三顿半同款冻干咖啡粉// 食品饮料", + "label": "测试美妆个护", "href": "", "disabled": false, "active": false, @@ -406,8 +406,8 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 28, + "api": 1 } }, { @@ -415,7 +415,7 @@ "tag": "button", "role": "", "cls": "iw-prod-item.", - "label": "小熊小熊 4L 可视空气炸锅// 家居家电", + "label": "透真清透物理防晒霜美妆个护", "href": "", "disabled": false, "active": false, @@ -424,20 +424,229 @@ "url": false, "overlay": false, "self": true, - "mutations": 7, - "api": 0 + "mutations": 26, + "api": 1 } }, { "idx": 23, "tag": "button", "role": "", + "cls": "iw-prod-item.", + "label": "耳机包数码 3C", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 26, + "api": 1 + } + }, + { + "idx": 24, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "Apple/苹果 iPhone 17 Pro数码 3C", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 26, + "api": 1 + } + }, + { + "idx": 25, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "滋啦速食牛肉面 · 6 桶装食品饮料", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + } + }, + { + "idx": 26, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "滋啦速食牛肉面 · 6 桶装食品饮料", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 23, + "api": 1 + } + }, + { + "idx": 27, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "植护24大包抽纸家用实惠装整箱面巾卫生餐巾纸巾悬挂式擦手面纸抽个护清洁", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + } + }, + { + "idx": 28, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "透真玻尿酸补水面膜美妆个护", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + } + }, + { + "idx": 29, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "测试美妆个护", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + } + }, + { + "idx": 30, + "tag": "button", + "role": "", + "cls": "iw-prod-item.", + "label": "桥接测试补水面膜 20260529美妆个护", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 28, + "api": 1 + } + }, + { + "idx": 31, + "tag": "button", + "role": "", "cls": "search-btn", "label": "搜索", "href": "", "disabled": false, "active": false, "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 4, + "api": 0 + } + }, + { + "idx": 32, + "tag": "button", + "role": "", + "cls": "search-btn", + "label": "按平台筛选", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 5, + "api": 0 + } + }, + { + "idx": 33, + "tag": "button", + "role": "", + "cls": "iw-filter-clear", + "label": "清空", + "href": "", + "disabled": true, + "active": false, + "verdict": "disabled" + }, + { + "idx": 34, + "tag": "button", + "role": "", + "cls": "iw-filter-opt", + "label": "抖音电商", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 9, + "api": 0 + } + }, + { + "idx": 35, + "tag": "button", + "role": "", + "cls": "iw-filter-opt", + "label": "淘宝", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", "signals": { "url": false, "overlay": false, @@ -447,11 +656,11 @@ } }, { - "idx": 24, + "idx": 36, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "抖抖音电商", + "cls": "iw-filter-opt", + "label": "天猫", "href": "", "disabled": false, "active": false, @@ -460,16 +669,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 25, + "idx": 37, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "淘淘宝", + "cls": "iw-filter-opt", + "label": "京东", "href": "", "disabled": false, "active": false, @@ -478,16 +687,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 26, + "idx": 38, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "猫天猫", + "cls": "iw-filter-opt", + "label": "拼多多", "href": "", "disabled": false, "active": false, @@ -496,16 +705,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 27, + "idx": 39, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "京京东", + "cls": "iw-filter-opt", + "label": "小红书", "href": "", "disabled": false, "active": false, @@ -514,16 +723,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 28, + "idx": 40, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "拼拼多多", + "cls": "iw-filter-opt", + "label": "快手", "href": "", "disabled": false, "active": false, @@ -532,16 +741,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 29, + "idx": 41, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "红小红书", + "cls": "iw-filter-opt", + "label": "视频号", "href": "", "disabled": false, "active": false, @@ -550,16 +759,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 30, + "idx": 42, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "快快手", + "cls": "iw-filter-opt", + "label": "亚马逊", "href": "", "disabled": false, "active": false, @@ -568,16 +777,16 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 31, + "idx": 43, "tag": "button", "role": "", - "cls": "platform-card.", - "label": "视视频号", + "cls": "iw-filter-opt", + "label": "1688", "href": "", "disabled": false, "active": false, @@ -586,84 +795,30 @@ "url": false, "overlay": false, "self": true, - "mutations": 5, + "mutations": 6, "api": 0 } }, { - "idx": 32, + "idx": 44, "tag": "button", "role": "", "cls": "platform-card.", - "label": "a亚马逊", + "label": "抖音电商", "href": "", "disabled": false, "active": false, "verdict": "works", "signals": { "url": false, - "overlay": false, - "self": true, - "mutations": 5, - "api": 0 - } - }, - { - "idx": 33, - "tag": "button", - "role": "", - "cls": "platform-card.", - "label": "阿1688", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 5, - "api": 0 - } - }, - { - "idx": 34, - "tag": "button", - "role": "", - "cls": "opt.active", - "label": "4 张", - "href": "", - "disabled": false, - "active": true, - "verdict": "noop-active", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 35, - "tag": "button", - "role": "", - "cls": "opt.", - "label": "8 张", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, + "overlay": true, "self": true, "mutations": 7, "api": 0 } }, { - "idx": 36, + "idx": 45, "tag": "button", "role": "", "cls": "opt.", @@ -681,21 +836,45 @@ } }, { - "idx": 37, + "idx": 46, "tag": "button", "role": "", - "cls": "btn.btn-primary", - "label": "立即生成 (预估 ¥6.00)", + "cls": "ic-param-btn", + "label": "模型火山 Seedream", "href": "", "disabled": false, "active": false, - "verdict": "skipped-destructive" + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 1, + "api": 0 + } + }, + { + "idx": 47, + "tag": "button", + "role": "", + "cls": "mi.selected", + "label": "火山 Seedream", + "href": "", + "disabled": false, + "active": true, + "verdict": "noop-active", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 0, + "api": 0 + } } ], "missing": [ "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,071.00", "折叠侧栏", "全部商品 7 个", "搜索批次/平台", diff --git a/core/qa/function-audit/output/platform-cover.audit.md b/core/qa/function-audit/output/platform-cover.audit.md index 46381b5..86a0a9d 100644 --- a/core/qa/function-audit/output/platform-cover.audit.md +++ b/core/qa/function-audit/output/platform-cover.audit.md @@ -1,20 +1,16 @@ # 功能审计 · platform-cover 路由:`/platform-cover` · 模式:quick -合计 38 · ✅ works 35 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 2 · ⚪ disabled 0 +合计 48 · ✅ works 46 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 1 · ⚪ disabled 1 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,071.00 - 折叠侧栏 - 全部商品 7 个 - 搜索批次/平台 - 时间 - 平台 -## ⏭ 破坏性按钮(未自动点,需人工验) -- 立即生成 (预估 ¥6.00) `button` - diff --git a/core/qa/function-audit/output/product-create.audit.json b/core/qa/function-audit/output/product-create.audit.json index a25599a..393dc64 100644 --- a/core/qa/function-audit/output/product-create.audit.json +++ b/core/qa/function-audit/output/product-create.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/products/new", "mode": "quick", "tally": { - "total": 31, - "works": 25, - "dead": 0, + "total": 47, + "works": 35, + "dead": 3, "error": 0, - "disabled": 1, - "skipped": 5, + "disabled": 0, + "skipped": 9, "noop": 0, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": true, "self": false, - "mutations": 28, - "api": 0 + "mutations": 36, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 16, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": true, "self": true, - "mutations": 28, - "api": 0 + "mutations": 50, + "api": 1 } }, { @@ -109,6 +109,24 @@ "tag": "a", "role": "", "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": true, + "mutations": 25, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "", "label": "视频项目", "href": "/projects", "disabled": false, @@ -118,12 +136,12 @@ "url": true, "overlay": true, "self": true, - "mutations": 22, + "mutations": 27, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "", @@ -136,12 +154,12 @@ "url": true, "overlay": true, "self": true, - "mutations": 26, - "api": 0 + "mutations": 45, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": true, "self": true, - "mutations": 39, - "api": 0 + "mutations": 30, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": true, "self": true, - "mutations": 22, - "api": 0 + "mutations": 25, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": true, "self": true, - "mutations": 24, + "mutations": 108, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 27, "api": 1 } }, { - "idx": 10, + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": true, "self": true, - "mutations": 51, + "mutations": 57, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": true, "self": false, - "mutations": 27, - "api": 0 + "mutations": 49, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": true, "self": false, - "mutations": 25, + "mutations": 29, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-edit-toggle", @@ -267,7 +321,7 @@ } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "btn.btn-primary.btn-create", @@ -275,17 +329,17 @@ "href": "", "disabled": false, "active": false, - "verdict": "works", + "verdict": "dead", "signals": { "url": false, "overlay": false, "self": false, - "mutations": 11, + "mutations": 0, "api": 0 } }, { - "idx": 15, + "idx": 18, "tag": "button", "role": "", "cls": "chip", @@ -298,15 +352,15 @@ "url": false, "overlay": true, "self": false, - "mutations": 12, + "mutations": 10, "api": 0 } }, { - "idx": 16, + "idx": 19, "tag": "div", "role": "button", - "cls": "mi.selected", + "cls": "mi.mi-all.selected", "label": "全部分类", "href": "", "disabled": false, @@ -314,18 +368,18 @@ "verdict": "works", "signals": { "url": false, - "overlay": true, + "overlay": false, "self": false, - "mutations": 12, + "mutations": 9, "api": 0 } }, { - "idx": 17, + "idx": 20, "tag": "div", "role": "button", - "cls": "product-card", - "label": "南卡 Lite Pro 蓝牙耳机 · 1200×800南卡 Lite Pro 蓝牙耳机数码 3C", + "cls": "mi", + "label": "数码 3C4", "href": "", "disabled": false, "active": false, @@ -334,16 +388,70 @@ "url": false, "overlay": false, "self": true, - "mutations": 23, + "mutations": 26, "api": 0 } }, { - "idx": 18, - "tag": "button", - "role": "", - "cls": "clear-sel", - "label": "清空", + "idx": 21, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "运动户外1", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 14, + "api": 0 + } + }, + { + "idx": 22, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "美妆个护6", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 25, + "api": 0 + } + }, + { + "idx": 23, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "食品饮料3", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 18, + "api": 0 + } + }, + { + "idx": 24, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "个护清洁1", "href": "", "disabled": false, "active": false, @@ -357,94 +465,11 @@ } }, { - "idx": 19, - "tag": "button", - "role": "", - "cls": "danger", - "label": "删除选中", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" - }, - { - "idx": 20, - "tag": "button", - "role": "", - "cls": "", - "label": "退出", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 18, - "api": 0 - } - }, - { - "idx": 21, - "tag": "button", - "role": "", - "cls": "", - "label": "退出", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 18, - "api": 0 - } - }, - { - "idx": 22, - "tag": "select", - "role": "", - "cls": "select", - "label": "美妆个护", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 23, + "idx": 25, "tag": "div", "role": "button", - "cls": "pf-upload-zone", - "label": "点击上传或拖拽图片到此处// 支持 JPG、PNG 格式,建议尺寸 800×800 以上,大小不", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 24, - "tag": "button", - "role": "", - "cls": "btn-guide", - "label": "使用指南", + "cls": "mi", + "label": "家居家电1", "href": "", "disabled": false, "active": false, @@ -458,11 +483,209 @@ } }, { - "idx": 25, + "idx": 26, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "服饰内衣1", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 13, + "api": 0 + } + }, + { + "idx": 27, "tag": "button", "role": "", - "cls": "btn", - "label": "取消", + "cls": "chip", + "label": "创建时间", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 11, + "api": 0 + } + }, + { + "idx": 28, + "tag": "button", + "role": "", + "cls": "stat.stat-link", + "label": "查看视频项目", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 26, + "api": 3 + } + }, + { + "idx": 29, + "tag": "div", + "role": "button", + "cls": "product-card", + "label": "缺三视图MISSING TRI-VIEW该商品还未生成 正 / 侧 / 背 三视图。直接生成图片", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 23, + "api": 3 + } + }, + { + "idx": 30, + "tag": "span", + "role": "button", + "cls": "tri-missing-badge", + "label": "缺三视图,查看说明", + "href": "", + "disabled": false, + "active": false, + "verdict": "dead", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 0, + "api": 0 + } + }, + { + "idx": 31, + "tag": "button", + "role": "", + "cls": "stat.stat-link", + "label": "查看视频项目", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 23, + "api": 3 + } + }, + { + "idx": 32, + "tag": "div", + "role": "button", + "cls": "product-card", + "label": "耳机包数码 3C2026-06-17 创建素材 1·视频 2", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 24, + "api": 3 + } + }, + { + "idx": 33, + "tag": "div", + "role": "button", + "cls": "product-card", + "label": "Apple/苹果 iPhone 17 Pro数码 3C2026-06-18 创建素材 1·视频 ", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 24, + "api": 3 + } + }, + { + "idx": 34, + "tag": "div", + "role": "button", + "cls": "product-card", + "label": "滋啦速食牛肉面 · 6 桶装食品饮料2026-06-17 创建素材 1·视频 0", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 24, + "api": 3 + } + }, + { + "idx": 35, + "tag": "div", + "role": "button", + "cls": "product-card", + "label": "缺三视图MISSING TRI-VIEW该商品还未生成 正 / 侧 / 背 三视图。直接生成图片", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 23, + "api": 3 + } + }, + { + "idx": 36, + "tag": "span", + "role": "button", + "cls": "tri-missing-badge", + "label": "缺三视图,查看说明", + "href": "", + "disabled": false, + "active": false, + "verdict": "dead", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 0, + "api": 0 + } + }, + { + "idx": 37, + "tag": "button", + "role": "", + "cls": "x", + "label": "关闭", "href": "", "disabled": false, "active": false, @@ -471,36 +694,60 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 13, "api": 0 } }, { - "idx": 26, + "idx": 38, "label": "", "tag": "", "verdict": "stale" }, { - "idx": 27, + "idx": 39, "label": "", "tag": "", "verdict": "stale" }, { - "idx": 28, + "idx": 40, "label": "", "tag": "", "verdict": "stale" }, { - "idx": 29, + "idx": 41, "label": "", "tag": "", "verdict": "stale" }, { - "idx": 30, + "idx": 42, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 43, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 44, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 45, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 46, "label": "", "tag": "", "verdict": "stale" @@ -509,10 +756,7 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", - "管理商品", - "商品分类", + "余额 ¥14,072.00", "关闭", "美妆个护", "使用指南", diff --git a/core/qa/function-audit/output/product-create.audit.md b/core/qa/function-audit/output/product-create.audit.md index 0781a6a..f95a64e 100644 --- a/core/qa/function-audit/output/product-create.audit.md +++ b/core/qa/function-audit/output/product-create.audit.md @@ -1,17 +1,21 @@ # 功能审计 · product-create 路由:`/products/new` · 模式:quick -合计 31 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)5 · ◷ noop-active 0 · ⚪ disabled 1 +合计 47 · ✅ works 35 · ❌ **dead 3** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0 + +## ❌ 点了没反应(DEAD —— 重点修) +| # | 文字 | 标签 | 类名 | +|---|---|---|---| +| 17 | 新建商品 | `button` | `btn.btn-primary.btn-create` | +| 30 | 缺三视图,查看说明 | `span/button` | `tri-missing-badge` | +| 36 | 缺三视图,查看说明 | `span/button` | `tri-missing-badge` | ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 -- 管理商品 -- 商品分类 +- 余额 ¥14,072.00 - 关闭 - 美妆个护 - 使用指南 diff --git a/core/qa/function-audit/output/product-detail.audit.json b/core/qa/function-audit/output/product-detail.audit.json index 701f740..11639ec 100644 --- a/core/qa/function-audit/output/product-detail.audit.json +++ b/core/qa/function-audit/output/product-detail.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f", "mode": "quick", "tally": { - "total": 29, - "works": 22, + "total": 31, + "works": 29, "dead": 0, "error": 0, "disabled": 0, - "skipped": 6, + "skipped": 1, "noop": 1, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 32, "api": 0 } }, @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -145,6 +145,24 @@ "tag": "a", "role": "", "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 41, + "api": 3 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", "label": "资产库", "href": "/library", "disabled": false, @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 37, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, + "mutations": 81, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, "api": 1 } }, { - "idx": 10, + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 22, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "ov-edit.ov-tri-trigger", @@ -262,12 +316,12 @@ "url": false, "overlay": true, "self": true, - "mutations": 12, + "mutations": 21, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "ov-tri-close", @@ -280,12 +334,12 @@ "url": false, "overlay": true, "self": false, - "mutations": 12, + "mutations": 21, "api": 0 } }, { - "idx": 15, + "idx": 18, "tag": "div", "role": "button", "cls": "thumb.placeholder", @@ -298,12 +352,30 @@ "url": false, "overlay": false, "self": false, - "mutations": 28, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 19, + "tag": "div", + "role": "button", + "cls": "thumb.placeholder", + "label": "点击放大", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 38, "api": 1 } }, { - "idx": 16, + "idx": 20, "tag": "div", "role": "button", "cls": "qa-item", @@ -313,19 +385,15 @@ "active": false, "verdict": "works", "signals": { - "url": true, + "url": false, "overlay": false, "self": false, - "mutations": 26, - "api": 0 - }, - "consoleNote": [ - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — ", - "Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — " - ] + "mutations": 22, + "api": 1 + } }, { - "idx": 17, + "idx": 21, "tag": "div", "role": "button", "cls": "qa-item", @@ -335,15 +403,15 @@ "active": false, "verdict": "works", "signals": { - "url": true, - "overlay": false, + "url": false, + "overlay": true, "self": false, - "mutations": 20, - "api": 0 + "mutations": 73, + "api": 9 } }, { - "idx": 18, + "idx": 22, "tag": "div", "role": "button", "cls": "qa-item", @@ -353,15 +421,15 @@ "active": false, "verdict": "works", "signals": { - "url": true, + "url": false, "overlay": false, - "self": false, - "mutations": 20, + "self": true, + "mutations": 22, "api": 0 } }, { - "idx": 19, + "idx": 23, "tag": "div", "role": "button", "cls": "qa-item.primary", @@ -374,12 +442,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 20, + "mutations": 81, "api": 0 } }, { - "idx": 20, + "idx": 24, "tag": "button", "role": "", "cls": "tab.active", @@ -397,7 +465,7 @@ } }, { - "idx": 21, + "idx": 25, "tag": "button", "role": "", "cls": "tab", @@ -410,12 +478,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 13, + "mutations": 22, "api": 0 } }, { - "idx": 22, + "idx": 26, "tag": "button", "role": "", "cls": "filter", @@ -426,44 +494,68 @@ "verdict": "works", "signals": { "url": false, - "overlay": false, + "overlay": true, "self": false, - "mutations": 10, + "mutations": 20, "api": 0 } }, - { - "idx": 23, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 24, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 25, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 26, - "label": "", - "tag": "", - "verdict": "stale" - }, { "idx": 27, - "label": "", - "tag": "", - "verdict": "stale" + "tag": "button", + "role": "", + "cls": "x", + "label": "关闭", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 24, + "api": 0 + } }, { "idx": 28, + "tag": "div", + "role": "button", + "cls": "pd-group-thumb.placeholder", + "label": "", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 29, + "tag": "span", + "role": "button", + "cls": "review-badge.rv-idle.clickable", + "label": "待审核尚未送审 · 点击立即提交火山人像审核", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 30, "label": "", "tag": "", "verdict": "stale" @@ -472,8 +564,7 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,908.00", - "账户", + "余额 ¥14,074.00", "全部类型", "通过", "网格视图", diff --git a/core/qa/function-audit/output/product-detail.audit.md b/core/qa/function-audit/output/product-detail.audit.md index d782139..2e37c9e 100644 --- a/core/qa/function-audit/output/product-detail.audit.md +++ b/core/qa/function-audit/output/product-detail.audit.md @@ -1,15 +1,14 @@ # 功能审计 · product-detail 路由:`/products/045ad8d6-8b15-486b-a4a9-f6968eb1555f` · 模式:quick -合计 29 · ✅ works 22 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)6 · ◷ noop-active 1 · ⚪ disabled 0 +合计 31 · ✅ works 29 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 1 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,908.00 -- 账户 +- 余额 ¥14,074.00 - 全部类型 - 通过 - 网格视图 diff --git a/core/qa/function-audit/output/products.audit.json b/core/qa/function-audit/output/products.audit.json index 8e867ff..79a3673 100644 --- a/core/qa/function-audit/output/products.audit.json +++ b/core/qa/function-audit/output/products.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/products", "mode": "quick", "tally": { - "total": 25, - "works": 24, + "total": 40, + "works": 29, "dead": 0, "error": 0, - "disabled": 1, - "skipped": 0, + "disabled": 0, + "skipped": 11, "noop": 0, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 28, - "api": 0 + "mutations": 35, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 28, - "api": 0 + "mutations": 49, + "api": 1 } }, { @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 0 + "mutations": 24, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -145,6 +145,24 @@ "tag": "a", "role": "", "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 43, + "api": 4 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", "label": "资产库", "href": "/library", "disabled": false, @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 39, - "api": 0 + "mutations": 40, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 0 + "mutations": 39, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 24, + "mutations": 104, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 26, "api": 1 } }, { - "idx": 10, + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 51, + "mutations": 56, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 27, - "api": 0 + "mutations": 34, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, + "mutations": 28, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-edit-toggle", @@ -267,7 +321,7 @@ } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "btn.btn-primary.btn-create", @@ -280,12 +334,12 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 20, "api": 0 } }, { - "idx": 15, + "idx": 18, "tag": "button", "role": "", "cls": "chip", @@ -298,15 +352,15 @@ "url": false, "overlay": true, "self": false, - "mutations": 12, + "mutations": 10, "api": 0 } }, { - "idx": 16, + "idx": 19, "tag": "div", "role": "button", - "cls": "mi.selected", + "cls": "mi.mi-all.selected", "label": "全部分类", "href": "", "disabled": false, @@ -314,18 +368,18 @@ "verdict": "works", "signals": { "url": false, - "overlay": true, + "overlay": false, "self": false, - "mutations": 12, + "mutations": 9, "api": 0 } }, { - "idx": 17, + "idx": 20, "tag": "div", "role": "button", - "cls": "product-card", - "label": "南卡 Lite Pro 蓝牙耳机 · 1200×800南卡 Lite Pro 蓝牙耳机数码 3C", + "cls": "mi", + "label": "数码 3C4", "href": "", "disabled": false, "active": false, @@ -334,16 +388,70 @@ "url": false, "overlay": false, "self": true, - "mutations": 23, + "mutations": 26, "api": 0 } }, { - "idx": 18, - "tag": "button", - "role": "", - "cls": "clear-sel", - "label": "清空", + "idx": 21, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "运动户外1", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 14, + "api": 0 + } + }, + { + "idx": 22, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "美妆个护6", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 25, + "api": 0 + } + }, + { + "idx": 23, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "食品饮料3", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 18, + "api": 0 + } + }, + { + "idx": 24, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "个护清洁1", "href": "", "disabled": false, "active": false, @@ -357,94 +465,11 @@ } }, { - "idx": 19, - "tag": "button", - "role": "", - "cls": "danger", - "label": "删除选中", - "href": "", - "disabled": true, - "active": false, - "verdict": "disabled" - }, - { - "idx": 20, - "tag": "button", - "role": "", - "cls": "", - "label": "退出", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 18, - "api": 0 - } - }, - { - "idx": 21, - "tag": "button", - "role": "", - "cls": "", - "label": "退出", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 18, - "api": 0 - } - }, - { - "idx": 22, - "tag": "select", - "role": "", - "cls": "select", - "label": "美妆个护", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 23, + "idx": 25, "tag": "div", "role": "button", - "cls": "pf-upload-zone", - "label": "点击上传或拖拽图片到此处// 支持 JPG、PNG 格式,建议尺寸 800×800 以上,大小不", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } - }, - { - "idx": 24, - "tag": "button", - "role": "", - "cls": "btn-guide", - "label": "使用指南", + "cls": "mi", + "label": "家居家电1", "href": "", "disabled": false, "active": false, @@ -456,14 +481,135 @@ "mutations": 13, "api": 0 } + }, + { + "idx": 26, + "tag": "div", + "role": "button", + "cls": "mi", + "label": "服饰内衣1", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 13, + "api": 0 + } + }, + { + "idx": 27, + "tag": "button", + "role": "", + "cls": "chip", + "label": "创建时间", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 11, + "api": 0 + } + }, + { + "idx": 28, + "tag": "button", + "role": "", + "cls": "stat.stat-link", + "label": "查看视频项目", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": true, + "self": false, + "mutations": 26, + "api": 3 + } + }, + { + "idx": 29, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 30, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 31, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 32, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 33, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 34, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 35, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 36, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 37, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 38, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 39, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,908.00", - "账户", + "余额 ¥14,074.00", "管理商品", - "商品分类" + "新建商品", + "商品分类", + "创建时间" ] } diff --git a/core/qa/function-audit/output/products.audit.md b/core/qa/function-audit/output/products.audit.md index 1375d2f..4dd2c26 100644 --- a/core/qa/function-audit/output/products.audit.md +++ b/core/qa/function-audit/output/products.audit.md @@ -1,15 +1,16 @@ # 功能审计 · products 路由:`/products` · 模式:quick -合计 25 · ✅ works 24 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 1 +合计 40 · ✅ works 29 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)11 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,908.00 -- 账户 +- 余额 ¥14,074.00 - 管理商品 +- 新建商品 - 商品分类 +- 创建时间 diff --git a/core/qa/function-audit/output/projects-new.audit.json b/core/qa/function-audit/output/projects-new.audit.json index 2f8e7f3..32f6211 100644 --- a/core/qa/function-audit/output/projects-new.audit.json +++ b/core/qa/function-audit/output/projects-new.audit.json @@ -4,8 +4,8 @@ "url": "http://127.0.0.1:5173/projects/new", "mode": "quick", "tally": { - "total": 15, - "works": 15, + "total": 18, + "works": 18, "dead": 0, "error": 0, "disabled": 0, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 48, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 48, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 36, "api": 0 } }, @@ -108,6 +108,24 @@ "idx": 5, "tag": "a", "role": "", + "cls": "", + "label": "模特库", + "href": "/models", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 24, + "api": 1 + } + }, + { + "idx": 6, + "tag": "a", + "role": "", "cls": "active", "label": "视频项目", "href": "/projects", @@ -118,12 +136,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 18, + "mutations": 24, "api": 0 } }, { - "idx": 6, + "idx": 7, "tag": "a", "role": "", "cls": "", @@ -136,12 +154,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 24, - "api": 0 + "mutations": 43, + "api": 4 } }, { - "idx": 7, + "idx": 8, "tag": "a", "role": "", "cls": "", @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 29, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 39, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, + "mutations": 44, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 26, "api": 1 } }, { - "idx": 10, + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, + "mutations": 56, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 48, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 28, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-ghost", @@ -262,12 +316,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 18, + "mutations": 24, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "pp-chip", @@ -280,7 +334,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 6, + "mutations": 13, "api": 0 } } @@ -288,8 +342,7 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,072.00", "1 选择商品 未选择", "2 项目配置 时长 · 风格 · 人物" ] diff --git a/core/qa/function-audit/output/projects-new.audit.md b/core/qa/function-audit/output/projects-new.audit.md index 1a6c48d..a053e41 100644 --- a/core/qa/function-audit/output/projects-new.audit.md +++ b/core/qa/function-audit/output/projects-new.audit.md @@ -1,15 +1,14 @@ # 功能审计 · projects-new 路由:`/projects/new` · 模式:quick -合计 15 · ✅ works 15 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0 +合计 18 · ✅ works 18 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 - 1 选择商品 未选择 - 2 项目配置 时长 · 风格 · 人物 diff --git a/core/qa/function-audit/output/projects.audit.json b/core/qa/function-audit/output/projects.audit.json index 196b53f..eae8158 100644 --- a/core/qa/function-audit/output/projects.audit.json +++ b/core/qa/function-audit/output/projects.audit.json @@ -4,8 +4,8 @@ "url": "http://127.0.0.1:5173/projects", "mode": "quick", "tally": { - "total": 24, - "works": 15, + "total": 27, + "works": 18, "dead": 0, "error": 0, "disabled": 0, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 26, - "api": 0 + "mutations": 47, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 26, + "mutations": 35, "api": 0 } }, @@ -108,81 +108,9 @@ "idx": 5, "tag": "a", "role": "", - "cls": "active", - "label": "视频项目", - "href": "/projects", - "disabled": false, - "active": true, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 17, - "api": 0 - } - }, - { - "idx": 6, - "tag": "a", - "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 25, - "api": 0 - } - }, - { - "idx": 7, - "tag": "a", - "role": "", - "cls": "", - "label": "资产库", - "href": "/library", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 38, - "api": 0 - } - }, - { - "idx": 8, - "tag": "a", - "role": "", - "cls": "", - "label": "团队", - "href": "/team", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": true, - "overlay": false, - "self": true, - "mutations": 21, - "api": 0 - } - }, - { - "idx": 9, - "tag": "a", - "role": "", - "cls": "", - "label": "消费", - "href": "/account", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -194,11 +122,119 @@ "api": 1 } }, + { + "idx": 6, + "tag": "a", + "role": "", + "cls": "active", + "label": "视频项目", + "href": "/projects", + "disabled": false, + "active": true, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": false, + "mutations": 19, + "api": 0 + } + }, + { + "idx": 7, + "tag": "a", + "role": "", + "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 42, + "api": 3 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", + "label": "资产库", + "href": "/library", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 28, + "api": 5 + } + }, + { + "idx": 9, + "tag": "a", + "role": "", + "cls": "", + "label": "团队", + "href": "/team", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 38, + "api": 3 + } + }, { "idx": 10, "tag": "a", "role": "", "cls": "", + "label": "消费", + "href": "/account", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 109, + "api": 4 + } + }, + { + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 25, + "api": 1 + } + }, + { + "idx": 12, + "tag": "a", + "role": "", + "cls": "", "label": "设置", "href": "/settings", "disabled": false, @@ -208,12 +244,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 50, + "mutations": 23, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 21, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +280,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 26, - "api": 0 + "mutations": 47, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +298,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 24, + "mutations": 27, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-edit-toggle", @@ -262,12 +316,12 @@ "url": false, "overlay": false, "self": true, - "mutations": 12, + "mutations": 26, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "btn.btn-primary.btn-lg", @@ -280,28 +334,10 @@ "url": true, "overlay": false, "self": false, - "mutations": 19, + "mutations": 51, "api": 0 } }, - { - "idx": 15, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 16, - "label": "", - "tag": "", - "verdict": "stale" - }, - { - "idx": 17, - "label": "", - "tag": "", - "verdict": "stale" - }, { "idx": 18, "label": "", @@ -337,13 +373,30 @@ "label": "", "tag": "", "verdict": "stale" + }, + { + "idx": 24, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 25, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 26, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,072.00", "管理项目", "新建项目", "商品品类", @@ -351,13 +404,10 @@ "创建时间", "网格", "列表", - "全部 6", - "进行中 4", - "已完成 2", + "全部 20", + "进行中 16", + "已完成 4", "失败 0", - "基础资产生成中", - "脚本待生成", - "故事板生成中", - "视频片段生成中" + "基础资产生成中" ] } diff --git a/core/qa/function-audit/output/projects.audit.md b/core/qa/function-audit/output/projects.audit.md index 0b18a67..41b0786 100644 --- a/core/qa/function-audit/output/projects.audit.md +++ b/core/qa/function-audit/output/projects.audit.md @@ -1,15 +1,14 @@ # 功能审计 · projects 路由:`/projects` · 模式:quick -合计 24 · ✅ works 15 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0 +合计 27 · ✅ works 18 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)9 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 - 管理项目 - 新建项目 - 商品品类 @@ -17,12 +16,9 @@ - 创建时间 - 网格 - 列表 -- 全部 6 -- 进行中 4 -- 已完成 2 +- 全部 20 +- 进行中 16 +- 已完成 4 - 失败 0 - 基础资产生成中 -- 脚本待生成 -- 故事板生成中 -- 视频片段生成中 diff --git a/core/qa/function-audit/output/settings.audit.json b/core/qa/function-audit/output/settings.audit.json index 7ccc9f2..0d6c0d5 100644 --- a/core/qa/function-audit/output/settings.audit.json +++ b/core/qa/function-audit/output/settings.audit.json @@ -4,13 +4,13 @@ "url": "http://127.0.0.1:5173/settings", "mode": "quick", "tally": { - "total": 26, - "works": 25, + "total": 25, + "works": 19, "dead": 0, "error": 0, - "disabled": 0, - "skipped": 1, - "noop": 0, + "disabled": 2, + "skipped": 3, + "noop": 1, "blocked": 0 }, "results": [ @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 15, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -145,6 +145,24 @@ "tag": "a", "role": "", "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 41, + "api": 4 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", "label": "资产库", "href": "/library", "disabled": false, @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "", @@ -172,12 +190,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 37, + "api": 3 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,33 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 105, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 2 + }, + "consoleNote": [ + "Failed to load resource: the server responded with a status of 404 (Not Found)" + ] + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "active", @@ -208,12 +247,30 @@ "url": false, "overlay": false, "self": false, + "mutations": 24, + "api": 0 + } + }, + { + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, "mutations": 22, "api": 0 } }, { - "idx": 11, + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +283,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,48 +301,34 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn", "label": "取消", "href": "", - "disabled": false, + "disabled": true, "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 23, - "api": 0 - } + "verdict": "disabled" }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "btn.btn-primary", "label": "保存所有变更", "href": "", - "disabled": false, + "disabled": true, "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 48, - "api": 11 - } + "verdict": "disabled" }, { - "idx": 15, + "idx": 18, "tag": "a", "role": "tab", "cls": "active", @@ -293,21 +336,21 @@ "href": "#sec-profile", "disabled": false, "active": true, - "verdict": "works", + "verdict": "noop-active", "signals": { "url": false, "overlay": false, "self": false, "mutations": 0, - "api": 1 + "api": 0 } }, { - "idx": 16, + "idx": 19, "tag": "a", "role": "tab", "cls": "", - "label": "安全3 设备", + "label": "安全14 设备", "href": "#sec-security", "disabled": false, "active": false, @@ -317,15 +360,15 @@ "overlay": false, "self": true, "mutations": 6, - "api": 1 + "api": 0 } }, { - "idx": 17, + "idx": 20, "tag": "a", "role": "tab", "cls": "", - "label": "通知4/4", + "label": "通知3/3", "href": "#sec-notify", "disabled": false, "active": false, @@ -339,43 +382,7 @@ } }, { - "idx": 18, - "tag": "a", - "role": "tab", - "cls": "", - "label": "创作默认", - "href": "#sec-pref", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 6, - "api": 3 - } - }, - { - "idx": 19, - "tag": "a", - "role": "tab", - "cls": "", - "label": "显示", - "href": "#sec-display", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": true, - "mutations": 21, - "api": 2 - } - }, - { - "idx": 20, + "idx": 21, "tag": "button", "role": "", "cls": "logout-pill", @@ -388,84 +395,24 @@ "url": false, "overlay": true, "self": false, - "mutations": 2, - "api": 0 - } - }, - { - "idx": 21, - "tag": "select", - "role": "", - "cls": "select", - "label": "system", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 17, + "mutations": 12, "api": 0 } }, { "idx": 22, - "tag": "select", - "role": "", - "cls": "select", - "label": "zh", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 23, - "tag": "select", - "role": "", - "cls": "select", - "label": "standard", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": false, - "self": false, - "mutations": 0, - "api": 0 - } + "label": "", + "tag": "", + "verdict": "stale" }, { "idx": 24, - "tag": "button", - "role": "", - "cls": "x.modal-x", - "label": "关闭", - "href": "", - "disabled": false, - "active": false, - "verdict": "works", - "signals": { - "url": false, - "overlay": true, - "self": false, - "mutations": 2, - "api": 0 - } - }, - { - "idx": 25, "label": "", "tag": "", "verdict": "stale" @@ -474,8 +421,9 @@ "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户", + "余额 ¥14,071.00", + "创作默认", + "显示", "上传新头像", "恢复默认", "验证", diff --git a/core/qa/function-audit/output/settings.audit.md b/core/qa/function-audit/output/settings.audit.md index 905ca62..a04ec6a 100644 --- a/core/qa/function-audit/output/settings.audit.md +++ b/core/qa/function-audit/output/settings.audit.md @@ -1,15 +1,16 @@ # 功能审计 · settings 路由:`/settings` · 模式:quick -合计 26 · ✅ works 25 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)1 · ◷ noop-active 0 · ⚪ disabled 0 +合计 25 · ✅ works 19 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 1 · ⚪ disabled 2 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,071.00 +- 创作默认 +- 显示 - 上传新头像 - 恢复默认 - 验证 diff --git a/core/qa/function-audit/output/summary.json b/core/qa/function-audit/output/summary.json index 0dd1be6..c6f9b08 100644 --- a/core/qa/function-audit/output/summary.json +++ b/core/qa/function-audit/output/summary.json @@ -1,177 +1,33 @@ [ - { - "page": "dashboard", - "blocked": 0, - "total": 25, - "works": 20, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 5, - "noop": 0, - "missing": 18 - }, - { - "page": "products", - "blocked": 0, - "total": 25, - "works": 24, - "dead": 0, - "error": 0, - "disabled": 1, - "skipped": 0, - "noop": 0, - "missing": 6 - }, - { - "page": "product-detail", - "blocked": 0, - "total": 29, - "works": 22, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 6, - "noop": 1, - "missing": 9 - }, - { - "page": "product-create", - "blocked": 0, - "total": 31, - "works": 25, - "dead": 0, - "error": 0, - "disabled": 1, - "skipped": 5, - "noop": 0, - "missing": 11 - }, - { - "page": "projects", - "blocked": 0, - "total": 24, - "works": 15, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 9, - "noop": 0, - "missing": 19 - }, - { - "page": "projects-new", - "blocked": 0, - "total": 15, - "works": 15, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 0, - "noop": 0, - "missing": 6 - }, - { - "page": "pipeline", - "blocked": 0, - "total": 34, - "works": 26, - "dead": 0, - "error": 0, - "disabled": 8, - "skipped": 0, - "noop": 0, - "missing": 15 - }, - { - "page": "library", - "blocked": 0, - "total": 38, - "works": 23, - "dead": 0, - "error": 0, - "disabled": 1, - "skipped": 13, - "noop": 1, - "missing": 10 - }, - { - "page": "account", - "blocked": 0, - "total": 26, - "works": 20, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 5, - "noop": 1, - "missing": 4 - }, - { - "page": "team", - "blocked": 0, - "total": 17, - "works": 17, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 0, - "noop": 0, - "missing": 4 - }, - { - "page": "messages", - "blocked": 0, - "total": 28, - "works": 20, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 7, - "noop": 1, - "missing": 9 - }, { "page": "asset-factory", "blocked": 0, - "total": 24, - "works": 23, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 0, - "noop": 1, - "missing": 5 - }, - { - "page": "image-optimize", - "blocked": 0, - "total": 24, - "works": 21, - "dead": 2, - "error": 0, - "disabled": 0, - "skipped": 0, - "noop": 1, - "missing": 12 - }, - { - "page": "model-photo", - "blocked": 0, - "total": 32, + "total": 35, "works": 31, "dead": 0, "error": 0, "disabled": 0, - "skipped": 0, + "skipped": 3, "noop": 1, - "missing": 8 + "missing": 4 + }, + { + "page": "model-photo", + "blocked": 0, + "total": 49, + "works": 44, + "dead": 0, + "error": 0, + "disabled": 0, + "skipped": 5, + "noop": 0, + "missing": 7 }, { "page": "model-photo-demo-a", "blocked": 0, - "total": 38, - "works": 33, + "total": 39, + "works": 34, "dead": 0, "error": 0, "disabled": 0, @@ -182,37 +38,25 @@ { "page": "model-photo-demo-b", "blocked": 0, - "total": 37, - "works": 34, + "total": 38, + "works": 36, "dead": 0, "error": 0, "disabled": 0, "skipped": 2, - "noop": 1, + "noop": 0, "missing": 5 }, { "page": "platform-cover", "blocked": 0, - "total": 38, - "works": 35, + "total": 48, + "works": 46, "dead": 0, "error": 0, - "disabled": 0, - "skipped": 1, - "noop": 2, - "missing": 8 - }, - { - "page": "settings", - "blocked": 0, - "total": 26, - "works": 25, - "dead": 0, - "error": 0, - "disabled": 0, - "skipped": 1, - "noop": 0, - "missing": 9 + "disabled": 1, + "skipped": 0, + "noop": 1, + "missing": 7 } ] diff --git a/core/qa/function-audit/output/summary.md b/core/qa/function-audit/output/summary.md index 47854a0..e3ee5be 100644 --- a/core/qa/function-audit/output/summary.md +++ b/core/qa/function-audit/output/summary.md @@ -1,27 +1,14 @@ # 功能审计汇总 -生成时间:2026-06-10T09:29:34.278Z · 模式:quick +生成时间:2026-07-02T03:20:24.149Z · 模式:quick | 页面 | 合计 | ✅works | ❌dead | 🛑error | ⏭skip | 🔍missing | 状态 | |---|---|---|---|---|---|---|---| -| dashboard | 25 | 20 | **0** | 0 | 5 | 18 | | -| products | 25 | 24 | **0** | 0 | 0 | 6 | | -| product-detail | 29 | 22 | **0** | 0 | 6 | 9 | | -| product-create | 31 | 25 | **0** | 0 | 5 | 11 | | -| projects | 24 | 15 | **0** | 0 | 9 | 19 | | -| projects-new | 15 | 15 | **0** | 0 | 0 | 6 | | -| pipeline | 34 | 26 | **0** | 0 | 0 | 15 | | -| library | 38 | 23 | **0** | 0 | 13 | 10 | | -| account | 26 | 20 | **0** | 0 | 5 | 4 | | -| team | 17 | 17 | **0** | 0 | 0 | 4 | | -| messages | 28 | 20 | **0** | 0 | 7 | 9 | | -| asset-factory | 24 | 23 | **0** | 0 | 0 | 5 | | -| image-optimize | 24 | 21 | **2** | 0 | 0 | 12 | | -| model-photo | 32 | 31 | **0** | 0 | 0 | 8 | | -| model-photo-demo-a | 38 | 33 | **0** | 0 | 4 | 5 | | -| model-photo-demo-b | 37 | 34 | **0** | 0 | 2 | 5 | | -| platform-cover | 38 | 35 | **0** | 0 | 1 | 8 | | -| settings | 26 | 25 | **0** | 0 | 1 | 9 | | +| asset-factory | 35 | 31 | **0** | 0 | 3 | 4 | | +| model-photo | 49 | 44 | **0** | 0 | 5 | 7 | | +| model-photo-demo-a | 39 | 34 | **0** | 0 | 4 | 5 | | +| model-photo-demo-b | 38 | 36 | **0** | 0 | 2 | 5 | | +| platform-cover | 48 | 46 | **0** | 0 | 0 | 7 | | - ⛔blocked = 页面始终落登录页/未就绪(后端或远程库不可用),**未审计**,非「0 缺陷」。修好后端再单独 `--only ` 复跑。 - ❌dead = 点了五路探针(URL/浮层/自身状态/网络/DOM)全无反应,优先修。 diff --git a/core/qa/function-audit/output/team.audit.json b/core/qa/function-audit/output/team.audit.json index 6205536..3d860ad 100644 --- a/core/qa/function-audit/output/team.audit.json +++ b/core/qa/function-audit/output/team.audit.json @@ -4,12 +4,12 @@ "url": "http://127.0.0.1:5173/team", "mode": "quick", "tally": { - "total": 17, - "works": 17, + "total": 30, + "works": 27, "dead": 0, "error": 0, "disabled": 0, - "skipped": 0, + "skipped": 3, "noop": 0, "blocked": 0 }, @@ -28,8 +28,8 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 32, + "api": 1 } }, { @@ -46,7 +46,7 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, @@ -64,7 +64,7 @@ "url": false, "overlay": true, "self": false, - "mutations": 14, + "mutations": 17, "api": 0 } }, @@ -82,8 +82,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { @@ -100,7 +100,7 @@ "url": true, "overlay": false, "self": true, - "mutations": 25, + "mutations": 34, "api": 0 } }, @@ -109,8 +109,8 @@ "tag": "a", "role": "", "cls": "", - "label": "视频项目", - "href": "/projects", + "label": "模特库", + "href": "/models", "disabled": false, "active": false, "verdict": "works", @@ -118,8 +118,8 @@ "url": true, "overlay": false, "self": true, - "mutations": 20, - "api": 0 + "mutations": 22, + "api": 1 } }, { @@ -127,8 +127,8 @@ "tag": "a", "role": "", "cls": "", - "label": "图片生成", - "href": "/asset-factory", + "label": "视频项目", + "href": "/projects", "disabled": false, "active": false, "verdict": "works", @@ -145,6 +145,24 @@ "tag": "a", "role": "", "cls": "", + "label": "图片生成", + "href": "/asset-factory", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": true, + "mutations": 41, + "api": 4 + } + }, + { + "idx": 8, + "tag": "a", + "role": "", + "cls": "", "label": "资产库", "href": "/library", "disabled": false, @@ -154,12 +172,12 @@ "url": true, "overlay": false, "self": true, - "mutations": 37, - "api": 0 + "mutations": 38, + "api": 5 } }, { - "idx": 8, + "idx": 9, "tag": "a", "role": "", "cls": "active", @@ -172,12 +190,12 @@ "url": false, "overlay": false, "self": false, - "mutations": 17, + "mutations": 19, "api": 0 } }, { - "idx": 9, + "idx": 10, "tag": "a", "role": "", "cls": "", @@ -190,12 +208,33 @@ "url": true, "overlay": false, "self": true, - "mutations": 22, - "api": 1 + "mutations": 105, + "api": 4 } }, { - "idx": 10, + "idx": 11, + "tag": "a", + "role": "", + "cls": "", + "label": "垃圾桶", + "href": "/trash", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": true, + "overlay": false, + "self": false, + "mutations": 24, + "api": 2 + }, + "consoleNote": [ + "Failed to load resource: the server responded with a status of 404 (Not Found)" + ] + }, + { + "idx": 12, "tag": "a", "role": "", "cls": "", @@ -208,12 +247,30 @@ "url": true, "overlay": false, "self": true, - "mutations": 49, + "mutations": 54, "api": 2 } }, { - "idx": 11, + "idx": 13, + "tag": "div", + "role": "button", + "cls": "user", + "label": "账户", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": false, + "self": true, + "mutations": 22, + "api": 0 + } + }, + { + "idx": 14, "tag": "a", "role": "", "cls": "", @@ -226,12 +283,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 25, - "api": 0 + "mutations": 46, + "api": 1 } }, { - "idx": 12, + "idx": 15, "tag": "button", "role": "", "cls": "icon-btn", @@ -244,12 +301,12 @@ "url": true, "overlay": false, "self": false, - "mutations": 23, + "mutations": 26, "api": 1 } }, { - "idx": 13, + "idx": 16, "tag": "button", "role": "", "cls": "btn.btn-primary", @@ -262,12 +319,12 @@ "url": false, "overlay": true, "self": false, - "mutations": 3, + "mutations": 5, "api": 0 } }, { - "idx": 14, + "idx": 17, "tag": "button", "role": "", "cls": "btn.btn-sm", @@ -278,14 +335,32 @@ "verdict": "works", "signals": { "url": false, - "overlay": false, + "overlay": true, "self": false, - "mutations": 4, + "mutations": 21, "api": 0 } }, { - "idx": 15, + "idx": 18, + "tag": "button", + "role": "", + "cls": "btn.btn-ghost.btn-sm", + "label": "邀请成员", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 9, + "api": 0 + } + }, + { + "idx": 19, "tag": "button", "role": "", "cls": "btn.btn-ghost.btn-sm", @@ -296,14 +371,14 @@ "verdict": "works", "signals": { "url": false, - "overlay": false, + "overlay": true, "self": false, - "mutations": 4, + "mutations": 9, "api": 0 } }, { - "idx": 16, + "idx": 20, "tag": "a", "role": "button", "cls": "more", @@ -314,17 +389,142 @@ "verdict": "works", "signals": { "url": true, - "overlay": true, + "overlay": false, "self": false, - "mutations": 24, + "mutations": 27, "api": 1 } + }, + { + "idx": 21, + "tag": "button", + "role": "", + "cls": "icon-btn-sm", + "label": "编辑", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 5, + "api": 0 + } + }, + { + "idx": 22, + "tag": "button", + "role": "", + "cls": "icon-btn-sm", + "label": "重置密码", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 17, + "api": 0 + } + }, + { + "idx": 23, + "tag": "button", + "role": "", + "cls": "icon-btn-sm.danger", + "label": "移出", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 8, + "api": 0 + } + }, + { + "idx": 24, + "tag": "button", + "role": "", + "cls": "icon-btn-sm", + "label": "编辑", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 6, + "api": 0 + } + }, + { + "idx": 25, + "tag": "button", + "role": "", + "cls": "icon-btn-sm", + "label": "重置密码", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 17, + "api": 0 + } + }, + { + "idx": 26, + "tag": "button", + "role": "", + "cls": "icon-btn-sm.danger", + "label": "移出", + "href": "", + "disabled": false, + "active": false, + "verdict": "works", + "signals": { + "url": false, + "overlay": true, + "self": false, + "mutations": 8, + "api": 0 + } + }, + { + "idx": 27, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 28, + "label": "", + "tag": "", + "verdict": "stale" + }, + { + "idx": 29, + "label": "", + "tag": "", + "verdict": "stale" } ], "missing": [ "搜索", "E E2E 桥接测试团队 20260529", - "余额 ¥14,907.00", - "账户" + "余额 ¥14,072.00" ] } diff --git a/core/qa/function-audit/output/team.audit.md b/core/qa/function-audit/output/team.audit.md index 82d82fe..bee9080 100644 --- a/core/qa/function-audit/output/team.audit.md +++ b/core/qa/function-audit/output/team.audit.md @@ -1,13 +1,12 @@ # 功能审计 · team 路由:`/team` · 模式:quick -合计 17 · ✅ works 17 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)0 · ◷ noop-active 0 · ⚪ disabled 0 +合计 30 · ✅ works 27 · ❌ **dead 0** · 🛑 error 0 · ⏭ skipped(破坏性)3 · ◷ noop-active 0 · ⚪ disabled 0 ## 🔍 设计稿里有、React 没渲染出来的控件(MISSING · 启发式) > 按控件文字与设计稿 `/exact` 对比,可能含装饰/动态文案误报,人工过一眼。 - 搜索 - E E2E 桥接测试团队 20260529 -- 余额 ¥14,907.00 -- 账户 +- 余额 ¥14,072.00 diff --git a/core/qa/repair_reserved_drift.py b/core/qa/repair_reserved_drift.py new file mode 100644 index 0000000..34da73a --- /dev/null +++ b/core/qa/repair_reserved_drift.py @@ -0,0 +1,59 @@ +"""修复 reserved_balance 冻结漂移(审计 I2)存量坏账。 + +根因:CreditReservation.task 是 OneToOneField(on_delete=CASCADE) —— 删任务/删项目 +级联删掉 ACTIVE 预留行,但 account.reserved_balance 冻结的份额永不归还。代码侧已由 +apps/billing/signals.py 的 pre_delete 守护堵住;本脚本回填历史漂移: + 对每个账户,在行锁事务内令 reserved_balance = Σ(ACTIVE 预留),差额落一条 RELEASE + 流水(task/user 为空,reason 注明修复),与 release_credit 的记账口径一致。 + +跑法(默认 dry-run 只报告;--apply 才写库): + cd backend && DJANGO_SETTINGS_MODULE=airshelf.settings.development \ + .venv/bin/python ../qa/repair_reserved_drift.py [--apply] +""" +import os +import sys +from decimal import Decimal + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "backend")) +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "airshelf.settings.development") +import django # noqa: E402 + +django.setup() + +from django.db import transaction # noqa: E402 +from django.db.models import Sum # noqa: E402 + +from apps.billing.models import CreditAccount, CreditLedger, CreditReservation # noqa: E402 + +apply_mode = "--apply" in sys.argv +fixed = 0 +for account_id in CreditAccount.objects.values_list("id", flat=True): + with transaction.atomic(): + account = CreditAccount.objects.select_for_update().get(id=account_id) + active_sum = ( + CreditReservation.objects.filter(team=account.team, status=CreditReservation.Status.ACTIVE) + .aggregate(s=Sum("amount"))["s"] or Decimal("0") + ) + drift = account.reserved_balance - active_sum + if drift == 0: + continue + print(f"[{account.team}] reserved={account.reserved_balance} ACTIVEΣ={active_sum} 漂移={drift}" + f" -> {'修复' if apply_mode else 'dry-run 不写'}") + if drift < 0: + # reserved 比 ACTIVE 还小属另一种坏账(理论不该出现),不自动动,人工核 + print(" !! 漂移为负,跳过(需人工核查)") + continue + if not apply_mode: + continue + account.reserved_balance = active_sum + account.save(update_fields=["reserved_balance", "updated_at"]) + CreditLedger.objects.create( + team=account.team, + ledger_type=CreditLedger.Type.RELEASE, + amount=drift, + balance_after=account.balance, + reason="修复:任务删除级联吞预留的历史漂移回填(I2)", + metadata={"kind": "repair_reserved_drift"}, + ) + fixed += 1 +print(f"\n{'已修复' if apply_mode else '待修复(dry-run)'}账户数:{fixed if apply_mode else '见上'}")