fix(billing): 删任务/删项目级联吞 ACTIVE 预留致 reserved_balance 永久冻结(审计 I2)

- 根因: CreditReservation.task 是 OneToOneField(CASCADE), AITask.project 也是 CASCADE
  —— 删项目→级联删任务→ACTIVE 预留行被吞, 账户冻结份额永不归还(实测 4 账户漂移共 ¥42,
  且随删项目持续增长)
- 修法: billing/signals.py 挂 AITask pre_delete, 删除前先 release_credit 释放(级联同样
  触发, release 自带行锁+幂等); apps.py ready() 接线
- 回归测试 x3: 直删任务/删项目级联/已扣费不重复释放
- qa/repair_reserved_drift.py: 存量漂移回填脚本(dry-run 默认, --apply 落 RELEASE 流水),
  已对线上 4 账户执行并复验清零
- qa/function-audit/output: 本轮 18 页模拟点击审计报告(0 真死按钮 0 JS 报错)

验证: 后端测试 213/213 通过, django check 无警告
补齐 aab4d7e: 该提交带走了 signals.py 之外的测试轮改动, 信号挂载点与回归测试在本提交收口

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-07-02 13:07:09 +08:00
co-authored by Claude Fable 5
parent aab4d7ea4c
commit dcc5d7fe50
43 changed files with 4860 additions and 3143 deletions
+3
View File
@@ -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 预留释放守护
+25
View File
@@ -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="任务删除,释放未结预留")
+42
View File
@@ -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)。"""
+184 -104
View File
@@ -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"
]
}
@@ -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`
@@ -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",
"时间"
]
}
@@ -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
- 时间
+269 -152
View File
@@ -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",
"基础资产生成中",
"已完成",
"脚本待生成",
"故事板生成中"
"已完成"
]
}
@@ -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`
@@ -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 高清",
"上传参考图"
]
}
@@ -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 高清
- 上传参考图
+202 -214
View File
@@ -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"
]
}
@@ -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
+147 -74
View File
@@ -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更新系统",
"系统 →"
]
}
@@ -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更新系统
- 系统 →
@@ -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",
"加入资产库"
]
}
@@ -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`
@@ -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"
]
}
@@ -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
## ⏭ 破坏性按钮(未自动点,需人工验)
@@ -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 个",
"时间",
@@ -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 个
- 时间
+172 -151
View File
@@ -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
}
]
}
+213 -282
View File
@@ -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",
"拼接导出",
"添加人物",
"添加场景",
"↻ 整体重写",
@@ -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`
@@ -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 个",
"搜索批次/平台",
@@ -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`
@@ -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",
"关闭",
"美妆个护",
"使用指南",
@@ -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
- 关闭
- 美妆个护
- 使用指南
@@ -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",
"全部类型",
"通过",
"网格视图",
@@ -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
- 全部类型
- 通过
- 网格视图
+283 -137
View File
@@ -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",
"管理商品",
"商品分类"
"新建商品",
"商品分类",
"创建时间"
]
}
@@ -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
- 管理商品
- 新建商品
- 商品分类
- 创建时间
@@ -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 项目配置 时长 · 风格 · 人物"
]
@@ -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 项目配置 时长 · 风格 · 人物
+170 -120
View File
@@ -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",
"基础资产生成中",
"脚本待生成",
"故事板生成中",
"视频片段生成中"
"基础资产生成中"
]
}
@@ -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
- 基础资产生成中
- 脚本待生成
- 故事板生成中
- 视频片段生成中
+114 -166
View File
@@ -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",
"创作默认",
"显示",
"上传新头像",
"恢复默认",
"验证",
@@ -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
- 创作默认
- 显示
- 上传新头像
- 恢复默认
- 验证
+26 -182
View File
@@ -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
}
]
+6 -19
View File
@@ -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 <page>` 复跑。
- ❌dead = 点了五路探针(URL/浮层/自身状态/网络/DOM)全无反应,优先修。
+243 -43
View File
@@ -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"
]
}
+2 -3
View File
@@ -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
+59
View File
@@ -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 '见上'}")