跳到主要内容

全站控件矩阵(单一事实源)

服务 P2b「全站控件闭环」。每波收口同步改本表。
状态:✅ 已有 E2E/自动化覆盖 · 🚧 开放待闭环 · 🗑 已裁剪/待删 · 📋 延期
采集:手工可跑 frontend/tests/e2e/control-inventory.spec.ts(默认 skip,不进 CI)。

波次索引​

波范围roadmap
W0HomeLayout / GroupLayout 子路由壳✅
W1获客与会话(登录/注册/退出/头像)✅
W2项目面(home / person / group / recent / new)✅
W3设计器核心(模型树/关系图/项目菜单)✅
W4版本时光机(版本/工单/审批)✅
W5导入导出 + 数据源✅
W6外围裁剪(dataDomain/query/ChatSQL/account/占位)✅

W0 — 布局壳​

表面控件预期闭环关联链路状态验证
HomeLayout子路由内容区渲染 props.children,主内容可见(非仅 slogan)/home 等 Home 路由✅layout-outlet.spec /home
HomeLayout顶栏 actionshomeRightContent(公众号/GitHub);无 SaveStatus / presence / 只读分享/home✅layout-outlet.spec /home
GroupLayout子路由内容区同上/project/group/setting/*✅layout-outlet.spec basic
DesignLayoutprops.children设计器主区渲染已正确接线✅smoke / relation / loading

W1 — 获客与会话​

表面控件预期闭环关联链路状态验证
/login登录按钮成功进 /home;错误凭证单次明确提示JWT 会话✅smoke「错误凭证」「登录→新建」
/login注册链接导航 /register转化漏斗✅session.spec「去注册」
/login AuthBrandShellSkip + Tab 序 + Enter首项 Skip「跳到登录表单」→ form;用户名→密码→登录→footer;Enter 提交;focus-visible;无 trapADR-0016 键盘门面✅session「登录壳键盘」
/login AuthBrandShell次密距品牌/表单 pad ≤20×16;gap ∈[8,12];门头 mb ∈[8,12];表单 Title mt≤8;项 mb∈[8,16];控件 ∈[24,32];标题 ≥24;hero ≤180;~40% 面板ADR-0016 密度✅smoke「登录页渲染」
/register AuthBrandShellSkip + Tab 序 + Enter首项 Skip「跳到注册表单」→ form;字段链(tip 出序)→注册→footer;Enter 校验;focus-visible;无 trapADR-0016 键盘门面✅session「注册壳键盘」
/register AuthBrandShell次密距与登录同源 pad 20×16 + gap12 + 门头 mb12 + 表单 body 12/28;「去注册」+ 注册键盘 densifyADR-0016 密度✅session「去注册」+「注册壳键盘」
/s/* 失效门次密距品牌/表单 pad 同上;门头 mb ≤20;键盘用例不改ADR-0016 密度✅share「无效 token」
/ LandingChromeSkip + Tab 序首项 Skip「跳到主操作」→ #landing-main-cta;试用→注册→登录;focus-visible surface;无 trapADR-0016 键盘门面✅landing「落地页键盘」
/ LandingChrome次密距次屏 section pad ≤52;对照行 ≤12;nav ≤20;footer ≤36;hero 品牌字 ≥36 + 全幅ADR-0016 密度✅landing「加载可见品牌」
/compare LandingChromeSkip + Tab 序同壳 Skip→ #landing-main-cta;打开演示→自部署→返回首页;surface focus-visible;无 trapADR-0016 键盘门面✅compare「竞品对照页键盘」
/compare LandingChrome次密距compare hero ≤36;section ≤52;对照行 ≤12;eyebrow ≥22;nav ≤20ADR-0016 密度✅compare「加载对照表」
/s/* 成功态 meta/表清单次密距meta ≤60 / gap≤2 / stage≤6;表清单 pad≤6·标题≤12·行∈20–26;折叠默认ADR-0016 密度✅demo「免登录 /demo」
只读分享 Modal次密距.erd-io-modal body≤8;hint mb≤8;链接行 mb≤10;输入 ~28;键盘不回归ADR-0016 密度✅share-project-keyboard
HomeLayout /homeSkip + Tab 序首项 Skip「跳到主内容」→ #home-main-content;继续建模→新建→示例→二级入口→项目卡;brand focus-visible;无 trapADR-0016 键盘门面✅home-keyboard「Home 键盘」
/home hero CTA次密距actions gap ≤8;secondary 钮 pad ≤4×10;hero gap ≤24 / mb·pb ≤16;主 CTA ≥40;问候字 ≥28ADR-0016 密度✅home-keyboard densify
/home 空态/公告次密距空态 pad ≤24×12;二级入口 mb ≤16;项目区 mb ≤20;公告 pt ≤4 / 行 pad ≤4·gap ≤10 / 标题 ≤13;CTA 保留ADR-0016 密度✅home-keyboard empty/announce densify
HomeLayout / GroupLayout 外井次密距shell/content pad ≤12×16;body ≤12×16;列表空态 ≤12×8;禁 24/20;Skip/顶栏不弱化ADR-0016 密度✅layout-outlet shell densify
/account/settings BaseView次密距表单/头像列 gap ≤16(窄屏 ≤12);禁 24;表单项/控件 28 不动;Skip/保存不弱化ADR-0016 密度✅account-settings densify
三壳顶栏 erd-chrome-actions次密距Home/Group/分享 gap ≤12;Design ≤8;禁 16;顶栏 64 / Skip·用户菜单不弱化ADR-0016 密度✅layout-outlet densify
三壳顶栏 erd-chrome-header次密距padX ≤16;brand–nav gap ≤12(Design ≤8);禁 20/16;顶栏 64 / Skip 不弱化ADR-0016 密度✅layout-outlet densify
Home 水平导航 Menu次密距项 padX ∈[8,12];项高 64;命中宽 ≥44;禁 padX16;Skip/键盘不弱化ADR-0016 密度✅layout-outlet + home-keyboard
Group 侧栏 nav Menu次密距项高 ∈[28,32];padX ∈[8,12];marginY ≤4;禁高40/pad24;Skip/键盘不弱化ADR-0016 密度✅layout-outlet + group-keyboard
DesignLayout 侧栏 nav Menu次密距项高 ∈[28,32];padX ∈[8,12];marginY ≤4;禁高40/pad24;版本/导入/导出/设置同源;menuitem 键盘不弱化ADR-0016 密度✅layout-outlet densify + 侧栏键盘
项目列表工具条碎密度Space gap ∈[8,12];搜索/钮高 ≤28;工具条高 ≤32;禁 Search 默认 32;键盘不弱化ADR-0016 密度✅project-surface densify + project-list-keyboard
/project/notice 公告行碎密度.project-list-page__notice-row gap ∈[8,12](目标 8);行 pad ≤4×8;禁 gap12;工具条不弱化ADR-0016 密度✅project-notice densify
画布空态 CTA .erd-empty-cta碎密度pad ∈[8,12](目标 10×12);主 CTA hit ∈[26,28];禁 14×18;Auth logo / 欢迎 pad 不弱化ADR-0016 密度✅relation「空态构图」
画布空态剪影 ErdEmptyDiagram compact碎密度宽 112(原 132);∈[96,120];禁 ≥132;hero 176 / Auth logo / 欢迎 pad 不弱化ADR-0016 密度✅relation「空态构图」
画布空态 panel .erd-empty-panel碎密度mt ≈ min(8vh,64) 且 ∈[32,64];禁 min(10vh,88);CTA pad / Auth logo / 欢迎 pad 不弱化ADR-0016 密度✅relation「空态构图」
画布空态纵节奏 title/desc碎密度title mt ≈8∈[6,10];desc mb ≈12∈[8,12];desc mt≤8;禁历史 16/18;Auth logo / 欢迎 pad / CTA pad / panel 顶距不弱化ADR-0016 密度✅relation「空态构图」
画布空态次链 .erd-empty-links碎密度mt ≈10∈[8,12];Controls 22/pad0 已密不改;禁 links mt>12;Auth logo / 欢迎 / CTA / panel / title·desc 不弱化ADR-0016 密度✅relation「空态构图」+「Controls」
团队成员工具条碎密度mb≤8;Space gap ∈[8,12];搜索/钮高 ≤28;工具条高 ≤32;钮 padX∈[8,12];禁 Search 默认 32 / mb16ADR-0016 密度✅group-layout-nav densify + group-keyboard / add-user-keyboard
Group 用户组页头/左角色签碎密度标题 ≤14·lh≤24·mb≤8·mt≤4;标题→签 ≤12;左签 padX∈[8,12]·高∈[28,32]·字≤13;禁 Title level4 / Space large / padX24ADR-0016 密度✅group-layout-nav densify + group-keyboard / add-user-keyboard
Group 基本设置页头碎密度标题 ≤14·lh≤24·mb≤8·mt≤4;标题→表单 ≤12;禁 Title level4ADR-0016 密度✅group-basic-setting densify + group-layout-nav / group-keyboard
Group 基本设置 Form碎密度项 mb∈[8,16](目标12);Input/Select/钮高∈[24,32](目标28);label≤13;禁 antd 默认 24/32ADR-0016 密度✅group-basic-setting densify + group-layout-nav / group-keyboard
Group 基本设置删区碎密度Divider mt/mb∈[8,16](目标12);body gap∈[4,12](目标8);次文≤13/lh≤20;标题 mb≤2;禁 Divider24 + Space 叠 mbADR-0016 密度✅group-basic-setting densify + group-project-delete-keyboard
DesignLayout 次屏碎密度.erd-secondary-pane pad ≤8×12;Steps mt/mb ≤10/12;设置 hint mb ≤8;SyncConfig→.erd-io-modal;禁 16/24 StepsADR-0016 密度✅designer-secondary-pane densify
导入/导出 Modal Steps次密距对齐.erd-io-modal__steps mt/mb ≤10/12;标题 ≤13;与次屏同阶;键盘不回归ADR-0016 密度✅reverse-database-keyboard + export-ddl-keyboard densify
导入/导出 Modal 头身脚碎密度.erd-io-modal header/body/footer pad ≤8×12(禁头 10×14×8 / 脚 8×14 / body 12×14);标题 ≤14·lh≥20;footer 钮 ≥28;键盘不回归ADR-0016 密度✅dbml-import + dbml-export densify
EntityModal 头身脚碎密度.erd-entity-modal header/body/footer pad ≤8×12;宽≤420;标题 ≤14·lh≥20;输入/OK ≥28;键盘不回归ADR-0016 密度✅relation「实体新建弹层密度」
GroupLayout /project/group/setting/*Skip + Tab 序首项 Skip「跳到主内容」→ #group-main-content;绕开顶栏+侧栏;基本设置字段进序;brand focus-visible;无 trapADR-0016 键盘门面✅group-keyboard「Group 键盘」
项目列表 /project/{person,recent,group}行 Enter / Tab 动作stretched link 消死卡;Enter 开设计器;Tab 行内动作可逆;行 :has inset brand focus-visible;无 trapADR-0016 键盘列表✅project-list-keyboard
项目动作弹窗 新建/修改/删除打开首焦 / Esc / Tab trap新增→类型;修改→项目名;删除→「是」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅project-action-modals-keyboard
导入/导出弹层 DBML打开首焦 / Esc / Tab trap导入→DBML文本;导出→导出模型;Esc 归还空态 CTA / 项目菜单;焦点不逃出 dialogADR-0016 键盘弹层✅import-export-keyboard
导入跳过校验 Modal.warning打开首焦 / Esc·OK / Tab trap二次导入全跳过→首焦「知道了」;Esc/OK 归还「解析并导入」ADR-0016 键盘弹层✅import-skip-warning-keyboard
版本动作弹窗 新增/编辑/删除/回滚打开首焦 / Esc / Tab trap新增/编辑最新→版本号;编辑非最新→描述;删除/回滚→「是」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅version-action-modals-keyboard
版本对比/详情 diff Modal打开首焦 / Esc / Tab trap比对→「初始版本」;详情→「导出变更清单」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅version-diff-keyboard
同步配置/重建版本 Modal打开首焦 / Esc / Tab trap同步配置→「字段增量」;重建版本→「版本号」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅version-sync-rebuild-keyboard
重建基线二次确认打开首焦 / Esc / Tab trap首焦「重建」;Esc 归还不落盘、归还「重建版本」钮;焦点不逃出 dialogADR-0016 键盘弹层✅version-rebuild-confirm-keyboard
初始化基线 Modal打开首焦 / Esc / Tab trap首焦「版本号」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅version-init-keyboard
复刻 Modal打开首焦 / Esc / Tab trap首焦「项目名」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅project-copy-keyboard
数据源设置 Modal打开首焦 / Esc / Tab trap首焦「新增数据源」;Esc 归还「项目菜单」;焦点不逃出 dialogADR-0016 键盘弹层✅database-setup-keyboard
默认项设置 Modal打开首焦 / Esc / Tab trap首焦「默认字段」Tab;Esc 归还「项目菜单」;焦点不逃出 dialogADR-0016 键盘弹层✅default-setup-keyboard
数据源逆向解析 Modal打开首焦 / Esc / Tab trap首焦「数据源」Select;Esc 归还「项目菜单」;焦点不逃出 dialogADR-0016 键盘弹层✅reverse-database-keyboard
导出DDL Modal打开首焦 / Esc / Tab trap首焦「数据源」Select;Esc 归还「项目菜单」;焦点不逃出 dialogADR-0016 键盘弹层✅export-ddl-keyboard
解析ERD文件 Modal打开首焦 / Esc / Tab trap首焦上传区「选择ERD文件」;Esc 归还「项目菜单」;焦点不逃出 dialogADR-0016 键盘弹层✅reverse-erd-keyboard
解析PdMan文件 Modal打开首焦 / Esc / Tab trap首焦上传区「选择PdMan文件」;Esc 归还「项目菜单」;焦点不逃出 dialogADR-0016 键盘弹层✅reverse-pdman-keyboard
修改密码 Modal打开首焦 / Esc / Tab trap首焦「密码」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅reset-password-keyboard
修改密码失败业务码失败 / 重试toast 可读;失败不关窗;重试成功关窗;不叠弹零静默失败✅reset-password-failure
同步配置失败业务码失败 / 重试仅 code===200 写 store+「设置成功」关窗;失败 toast 可读;不关窗可重试零静默失败✅sync-config-failure
默认项设置失败业务码失败 / 重试仅 code===200 写 store+「设置成功」关窗;失败 toast 可读;不关窗可重试零静默失败✅default-setup-failure
数据源设置确定失败业务码失败 / 重试仅 PUT 成功「保存成功!」关窗;失败 toast 可读;不关窗可重试零静默失败✅database-setup-failure
EntityModal 落盘失败业务码失败 / 重试仅 save code===200 写 store+toast+关窗;失败 toast 可读;不关窗可重试零静默失败✅entity-modal-failure
画布关系图弹层落盘失败业务码失败 / 重试仅 save code===200 写 store+toast+关窗;失败 toast 可读;不关窗可重试零静默失败✅diagram-modal-failure
画布表头改名落盘失败业务码失败 / 重试仅 save code===200 写 store+退出编辑;失败 toast 可读;草稿/节点 id 保留可重试零静默失败✅table-rename-failure
画布建表/行内加字段落盘失败业务码失败 / 重试仅 save code===200 上图/关新建编辑;失败 toast;无节点或草稿可重试;空名 toast/空字段 CTA 保留零静默失败✅canvas-create-field-failure
画布字段改名/删字段落盘失败业务码失败 / 重试仅 save code===200 退出编辑/移出行;失败 toast;改名草稿保留;删确认窗 keep(reject)可再删零静默失败✅canvas-field-rename-delete-failure
画布删表落盘失败业务码失败 / 重试仅 save code===200 移出+「表删除成功」;失败 toast;节点保留;删确认窗 keep(reject)可再删零静默失败✅canvas-delete-table-failure
左树删模型/关系图落盘失败业务码失败 / 重试仅 save code===200 移出+成功 toast;失败 toast;树/表保留;删确认窗 keep(reject)可再删零静默失败✅tree-delete-module-diagram-failure
左树剪切/粘贴表落盘失败业务码失败 / 重试仅 save code===200 写剪贴板与移出/写入+成功 toast;失败 toast;无副本或表保留;可重试;复制不落盘零静默失败✅tree-cut-paste-failure
画布拖表坐标落盘失败业务码失败 / 重试commitDiagramGeometry 仅 save code===200 写 layout;失败 toast;RF transform 回滚可再拖零静默失败✅canvas-drag-reposition-failure
画布对齐/自动布局落盘失败业务码失败 / 重试alignSelected/autoLayout→commitDiagramGeometry;失败 toast;RF 回滚可再点零静默失败✅canvas-align-layout-failure
Frame 改名/适应成员落盘失败业务码失败 / 重试renameFrame/commitDiagramGeometry persist;失败 toast;改名草稿保留;适应成员 RF+store 回滚;可重试零静默失败✅canvas-frame-rename-bounds-failure
Frame 新建/成员加减落盘失败业务码失败 / 重试createFrame/addFrameMembers/removeFrameMembers persist;失败 toast;不上图/成员不变;加入拒关窗;可重试零静默失败✅canvas-frame-members-failure
画布连线建关联落盘失败业务码失败 / 重试addAssociation persist;失败 toast;不上边;可再拖重试零静默失败✅canvas-connect-edge-failure
画布改边基数落盘失败业务码失败 / 重试updateAssociationRelation persist;失败 toast;chip 保持原基数;可再选重试零静默失败✅canvas-cardinality-failure
画布边 FK 元数据约束名 / 规则 / 失败重试updateAssociationFkMeta persist;同旧 constraintName 拆边同步改名;erd-edge-constraint-name零静默失败✅canvas-fk-meta-edit
画布字段 meta 落盘失败业务码失败 / 重试类型/PK/NN/AI/隐藏/浏览 PK:仅 save code===200 写 store;失败 toast;编辑草稿回滚;隐藏不退出零静默失败✅canvas-field-meta-failure
表设计 JExcel 字段 meta 落盘失败业务码失败 / 重试字段签 PK/隐藏等:仅 save code===200 写 store;失败 toast + 重挂网格回滚勾选;可重试;画布对齐零静默失败✅jexcel-field-meta-failure
表设计索引签落盘失败业务码失败 / 重试添加/唯一勾选等:仅 save code===200 写 store + 成功 toast;失败 toast + 空态/重挂回滚;删确认失败拒关窗;可重试;画布 UK零静默失败✅jexcel-index-failure
表设计索引签字段/表达式文本落盘 / 失败回滚「字段/表达式*」分号混写 → fields[];业务码失败重挂回滚;成功可见 id;LOWER(…)零静默失败✅index-expression-edit
发起SQL审批 Modal打开首焦 / Esc / Tab trap首焦「审批人」;Esc 归还触发器(父详情仍开);焦点不逃出 dialogADR-0016 键盘弹层✅sql-approval-keyboard
添加成员 Modal打开首焦 / Esc / Tab trap首焦「选择用户」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅add-user-keyboard
添加成员邀请失败业务码失败 / 重试toast 可读;失败不关窗;重试成功关窗;不叠弹零静默失败✅add-user-invite-failure
版本初始化/重建保存失败业务码失败 / 重试初始化失败不关窗可重试;重建失败无伪装成功、无 rebaseline零静默失败✅version-save-failure
只读分享创建失败业务码失败 / 重试toast 可读;窗保持开;「重新生成」可重试;不叠弹;禁禁用死 affordance零静默失败✅share-create-failure
只读分享 Modal打开首焦 / Esc / Tab trap首焦「分享链接」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅share-project-keyboard
只读分享吊销确认打开首焦 / Esc / Tab trap首焦「吊销」;Esc 归还不吊销;外层分享窗仍开;焦点归还吊销钮;焦点不逃出 dialogADR-0016 键盘弹层✅share-revoke-keyboard
团队项目删确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还「删除团队项目」;焦点不逃出 dialogADR-0016 键盘弹层✅group-project-delete-keyboard
团队成员移除确认打开首焦 / Esc / Tab trap首焦「移除」;Esc 归还不移;焦点归还「移除成员 {username}」;焦点不逃出 dialogADR-0016 键盘弹层✅group-user-remove-keyboard
审批动作确认(通过/拒绝/撤销/复批)打开首焦 / Esc / Tab trap首焦语义 OK;Esc 归还不落盘;焦点归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅approval-action-keyboard
审批/工单 SQL 明细 Modal.info打开首焦 / Esc·OK / Tab trap首焦「知道了」;Esc/OK 归还「查看SQL」;焦点不逃出 dialogADR-0016 键盘弹层✅sql-detail-keyboard
导入跳过校验 Modal.warning打开首焦 / Esc·OK / Tab trap首焦「知道了」;Esc/OK 归还「解析并导入」;焦点不逃出 dialogADR-0016 键盘弹层✅import-skip-warning-keyboard
EntityModal 新增模型/表/关系图打开首焦 / Esc / Tab trap新增模型首焦「名称」;新增表首焦「所属模型」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅entity-modal-keyboard
画布新建/重命名关系图 Modal打开首焦 / Esc / Tab trap首焦「关系图名称」;Esc 归还触发器;焦点不逃出 dialog;提交中禁 EscADR-0016 键盘弹层✅diagram-modal-keyboard
画布加入分组 Modal打开首焦 / Esc / Tab trap首焦「选择分组」;Esc 归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅diagram-modal-keyboard(同源产品)
画布删表确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅canvas-delete-table-keyboard
画布删边/删分组确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅canvas-delete-edge-frame-keyboard
画布删字段确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅canvas-delete-field-keyboard
表设计删索引确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅table-index-delete-keyboard
JExcel 工具栏删行确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还触发器;焦点不逃出 dialogADR-0016 键盘弹层✅jexcel-toolbar-delete-keyboard
JExcel 快捷操作 Modal.info打开首焦 / Esc / Tab trap首焦「知道了」;Esc/OK 归还「快捷操作」;焦点不逃出 dialogADR-0016 键盘弹层✅jexcel-grid-keyboard
JExcel Escape 退格编辑态 Esc / 焦点归还Esc 丢弃单元格草稿;焦点归还 jexcel-grid;签页不关;禁落隐藏 textareaADR-0016 键盘网格✅jexcel-grid-keyboard
左树删模型/表/关系图确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还行「…操作」;焦点不逃出 dialogADR-0016 键盘弹层✅tree-delete-keyboard
数据源设置删确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还行删钮;外层配置窗仍开;焦点不逃出确认 dialogADR-0016 键盘弹层✅database-setup-delete-keyboard
工作台 databaseConfig 删/批删确认打开首焦 / Esc / Tab trap首焦「删除」;Esc 归还不删;焦点归还行删钮/批删钮;焦点不逃出 dialogADR-0016 键盘弹层✅database-config-delete-keyboard
版本同步结果 Modal.success/warn打开首焦 / Esc·OK / Tab trap;行绑定首焦「知道了」;Esc/OK 归还「同步」;点击行「同步」不依赖悬停;焦点不逃出 dialogADR-0016 键盘弹层✅version-sync-result-keyboard
工作台 databaseConfig Drawer打开首焦 / Esc / Tab trap首焦「连接名称」;Esc 归还「新建连接」/「编辑」;焦点不逃出 dialogADR-0016 键盘弹层✅database-config-drawer-keyboard
/404 AuthBrandShell 门Skip + Tab 序首项 Skip「跳到主操作」→ #exception-main-cta;打开示例→返回首页;focus-visible brand;无 trapADR-0016 键盘门面✅not-found「404 壳键盘」
/403 AuthBrandShell 门Skip + Tab 序同 404;深链 /403 可达ADR-0016 键盘门面✅not-found「403 壳键盘」
/s/:token 失效门Skip + Tab 序首项 Skip「跳到主操作」→ #exception-main-cta(share-invalid-gate);打开示例→返回首页;focus-visible brand;无 trapADR-0016 键盘门面✅share「分享失效门键盘」
/register注册提交成功进 /home;可带 redirectshare autofork✅session.spec「注册成功」;share redirect
/demo重定向→ /s/public-demo 只读图 + 复制 CTAADR-0007✅demo.spec
/s/:token复制到我的项目未登录→注册 redirect;登录→fork分享 fork✅share.spec
头像菜单个人中心→ /account/settings?selectKey=baseaccount✅session.spec
头像菜单授权信息→ selectKey=identificationlicence✅session.spec
头像菜单退出登录cache.clear() 回 /loginlogout()✅session.spec
DesignLayout 顶栏GitHub stars 链外链 erdonline/erdonline社区✅文案/链已合入
DesignLayout 顶栏分享按钮生成只读链接ADR-0007✅share.spec
DesignLayout 顶栏协作 presence可见在线名单ADR-0009✅presence.spec

W2 — 项目面(HomeLayout 菜单 + /project/*)​

HomeLayout 主导航​

表面控件预期闭环关联链路状态验证
HomeLayout 菜单首页→ /home 主内容W0✅layout-outlet / project-surface
HomeLayout 菜单数据模型→ /dataModels项目列表别名面✅project-surface
HomeLayout 菜单数据查询_defaultProps 已摘;路由保留实验深链exec 忽略所选 DS✅home-data-query.spec
HomeLayout 菜单数据源→ /databaseConfigADR-0008 / W5✅project-surface / adr0008
HomeLayout 菜单社区外链 GitHub Issues社区✅外链不测

/home 快捷​

表面控件预期闭环关联链路状态验证
/home新建模型 home-link-new-project→ /project/person空态新建✅activation / project-activation
/home示例项目 home-link-example建示例并进设计器见表30s 激活✅activation.spec
/home导入模型→ /project/person(引导)导入在设计器✅project-surface 导航类同 person
/home最近项目→ /project/recent✅project-surface
/home个人项目→ /project/person✅project-surface / smoke
/home团队项目→ /project/group✅project-surface
/homeVIP/授权角标→ account identification📋头像菜单已覆盖 identification

项目列表路由​

表面控件预期闭环关联链路状态验证
/project/person空态「新建」弹窗→创建→列表可见VIP/开源不限数✅project-activation「新建」
/project/person一键示例示例进设计器✅project-activation / activation
/project/person项目卡片打开进 /design/table/model?projectId=死链已修✅smoke「登录→新建→设计器」
/project/person删除项目确认后列表消失;可再建缓存✅smoke 清理路径
/project/recent列表/打开打开最近项目进设计器✅project-surface
/project/group团队项目列表/打开进设计器或设置权限✅project-surface 可达;empty-projectjson
/project/group进入团队设置→ /project/group/setting/basicGroupLayout✅layout-outlet
/project/notice通知列表首页「更多公告」→列表可读;失败 toast;notice-row gap ≤8✅project-notice.spec
/project/new(整页)redirect→/project/person;占位页已删W2 新建走 person✅project-surface
/dataModels模型列表入口与项目列表等价可用✅project-surface

W3 — 设计器核心​

表面控件预期闭环关联链路状态验证
DesignLayout 菜单模型→ /design/table/model关系图✅relation / smoke
/design/table/model树「关系图」tree-open-relation打开画布标签RF✅relation.spec
/design/table/model空态建表 CTA表节点出现✅relation 全旅程
/design/table/model内联字段/连线/守卫持久化刷新仍在;chnname/defaultValue 行内;删字段二次确认(× / 选中 Delete·Backspace)✅relation
/design/table/model表节点「索引」canvas-open-index直达表设计索引签(aria-selected);可切字段后再经画布重入✅relation「画布打开索引签」
/design/table/model索引签空态 CTA index-empty-add「添加第一个索引」→ 种子行 + 表格;无白屏✅relation「索引签空态 CTA」
/design/table/model字段签空态 CTA field-empty-add「添加第一个字段」→ 种子首 defaultField / id + 表格;无白屏✅table-field-empty
/design/table/model画布空表字段 CTA canvas-fields-empty「添加第一个字段」→ 内联新建;有字段后回「添加字段」✅table-field-empty
/design/table/model索引签再加一行 index-add-row已有索引后「+ 再添加一条索引」→ 追加种子行;无死 affordance✅relation「索引签再加一行 CTA」
/design/table/model索引签删除 index-delete-N「删除索引 {name}」→ Modal 确认才删;取消保留;删空回空态 CTA;键盘首焦/Esc/Tab trap✅relation「索引签删除二次确认」+table-index-delete-keyboard
/design/table/modelJExcel 工具栏删除 jexcel-toolbar-remove「删除选中行」→ Modal 确认才 deleteRow;取消保留;未选中 toast;键盘首焦/Esc/Tab trap✅relation「JExcel 工具栏删除二次确认」+jexcel-toolbar-delete-keyboard
/design/table/modelJExcel 工具栏/网格 Tab 序7 工具栏按钮 Tab+Enter;jexcel-grid 可聚焦;Shift+Tab 无 trap✅relation「工具栏 Tab 可达」
/design/table/modelJExcel Escape 退格 / 快捷操作 Modal编辑态 Esc 丢弃→焦点回 jexcel-grid;快捷操作首焦「知道了」;Esc 归还;Tab trapADR-0016 键盘✅jexcel-grid-keyboard
/design/table/model表设计字段签半成品写回缺 name/typeName → toast + 中止写回;全空草稿可丢;Esc 停网格✅relation「半成品行不静默丢」
/design/table/model表设计索引签半成品写回缺 name/fields(含 []/「;」空)→ toast + 中止写回;Esc 停网格;重入索引仍在✅relation「索引签:半成品行不静默丢」
/design/table/model表节点「字段」canvas-open-field直达表设计字段签(aria-selected + table-field-edit);可切索引后再经画布重入✅relation「画布打开字段签」
/design/table/model表节点「元数据」canvas-open-code直达表设计元数据应用签(aria-selected + table-code-edit);可切字段后再经画布重入✅relation「画布打开元数据应用签」
/design/table/model表节点「触发器」canvas-open-trigger直达表设计触发器签(aria-selected + table-trigger-edit);可切字段后再经画布重入✅relation「画布打开触发器签」
/design/table/model触发器签编辑已有行行「编辑」弹层;结构变重建 DDL;persist-on-200;失败不关窗可重试;首焦名称零静默失败✅table-triggers 编辑 / 编辑落盘失败
/design/table/model表头 ✎ 改名名称更新;chnname 双栏内联✅relation「改名」/「表头中文名」
/design/table/modelPK 徽标切换取消/恢复✅relation「PK」
/design/table/model树删表二次确认;确认后 removeEntity persist:true(仅 save 成功移出);失败窗 keep✅smoke 取消/确认 + canvas-delete-table-failure
/design/table/model树删模型/关系图二次确认;确认后 removeModule/removeDiagram persist:true;失败窗 keep;取消保留✅multi-diagram「左树删除关系图/模型二次确认」+tree-delete-module-diagram-failure
/design/table/model树剪切/粘贴表·模型cut*/past* persist:true(仅 save 成功写剪贴板与移出/写入);失败保留;复制不落盘✅tree-cut-paste-failure
/design/table/model画布拖表/拖框坐标commitDiagramGeometry persist:true;仅 save 成功写 layout/bounds;失败 RF 回滚✅canvas-drag-reposition-failure
/design/table/model画布对齐/自动布局commitDiagramGeometry persist:true;仅 save 成功写 layout;失败 RF 回滚;成功才 fitView✅canvas-align-layout-failure
/design/table/modelFrame 改名/适应成员renameFrame/commitDiagramGeometry persist;失败草稿/RF 回滚;成功才「已适应成员」✅canvas-frame-rename-bounds-failure
/design/table/modelFrame 新建/成员加减createFrame/add*Members/remove*Members persist;失败不上图/成员不变✅canvas-frame-members-failure
/design/table/model拖连线建关联addAssociation persist;失败不上边可重试✅canvas-connect-edge-failure + relation PK/FK
/design/table/model改边基数updateAssociationRelation persist;失败保持原基数可重试✅canvas-cardinality-failure + relation PK/FK
/design/table/modelundo/redo可撤销画布操作canvasHistory✅relation 全旅程 Meta+z
/design/table/model删边Delete → Modal 确认后 removeAssociation persist:true(仅 save 成功移出);失败窗 keep;取消保留✅relation「画布删表/删边」「删边后刷新」+canvas-delete-edge-frame-failure
/design/table/model画布删表Delete → Modal 确认后 removeEntity persist:true(仅 save 成功移出);失败窗 keep;取消保留;键盘首焦/Esc/Tab trap✅relation「画布删表/删边二次确认」+canvas-delete-table-keyboard+canvas-delete-table-failure
/design/table/model画布删分组Delete → Modal 确认后 removeFrame persist:true(仅 save 成功移出);失败窗 keep;仅删框不删表✅diagram-frame「删除分组二次确认」+canvas-delete-edge-frame-keyboard+canvas-delete-edge-frame-failure
DesignLayout项目菜单按钮下拉打开✅project-menu.spec
项目菜单全部项目→ /project/recent✅project-menu「全部项目」
项目菜单最近项目最多 5 条;当前 ✓;点其它项切设计器✅project-menu「最近项目可切换」
项目菜单版本(已迁顶栏)顶栏「版本」→ 版本管理;菜单内无「版本」✅project-menu「全部项目…顶栏版本」
项目菜单导入→三项弹窗可开、关下拉不挡✅project-menu「导入」
项目菜单导出→五项可见;DDL 可开✅project-menu「导出」
项目菜单设置→数据源设置弹窗可开ADR-0008✅project-menu「数据源设置」
项目菜单设置→默认项设置打开+保存成功提示✅project-menu「默认项」
DesignLayout自动保存状态顶栏可见保存中/已保存;失败为可点「保存失败,点击重试」+ 单条 toast(断网不叠弹)P1✅relation.spec「保存中…→已保存」+ save-failure
DesignLayoutCommonTabs / 表设计签头栏高 ~24;签头 padX≤8/gap≤4;内签 gutter≤2;标签/关闭钮不 clip;Tab focus-visible;Cmd+1/2/3ADR-0016 密度✅model-design-ux「表设计三签」「表设计内签」
DesignLayoutCommonTabs 签头键盘←/→ roving + Enter 激活;关闭 aria-label=关闭 {表名};关签焦点归还;focus-visible;内签同构ADR-0016 键盘门面✅common-tabs-keyboard
RF TableNode底栏 / 空表井 chrome表头 pad≤6 / 字段 minH20 已密;添加 margin≤6 + minH≥22;打开表设计 margin≤6×4 + btn minH≥22;空表井 pad≤6/gap≤4;NODE_FOOTER_H 28;persist 不回归ADR-0016 密度✅relation「PK/FK」+ table-field-empty「画布空表」
DesignLayout命令面板/快捷键Cmd/Ctrl+K/F 开合;搜表定位+高亮;↑↓/aria-activedescendant;空态「无匹配结果」pad≤8×8 / list≤2;footer pad≤4×8;Esc 归还;Tab trapRF CommandPalette✅relation.spec「命令面板」+「搜表定位」
DesignLayout快捷键速查卡? / 工具栏「?」→ aria dialog「快捷键」;含 Cmd+1/2/3 表设计签;密度 maxH≤360 / list 2×4 / row padY≤6;Esc + 关闭钮可焦;与命令面板互斥RF ShortcutHelp✅relation.spec「快捷键速查」
DesignLayoutSkip 跳过导航首项 Tab「跳到模型树/主工作区」→ 地标 focus;无 trap焦点环审计✅relation「设计器 Skip」
DesignLayout左树工具条密度工具条 ≤32 / 控件 ∈24–28;图标不 clip;sider 次密距;新建 focus-visibleQueryTree toolbar + sider-inner✅model-design-ux「模型树」
DesignLayout版本列表二次密度工具条控件 ∈24–28;图标不 clip;token 色;新增钮 focus-visible;键盘弹层不回归version-page toolbar/list✅version.spec「版本列表行密度」+ version-action-modals-keyboard
DesignLayout版本列表空态井次密空态 pad ≤12×8;禁 16×12;保留「保存第一个版本」CTAversion-empty / list empty-text✅version.spec「无数据源也可新增版本」
DesignLayout工单/审批列表密度标题栏 ~24;行 pad 4×8;动作钮 ∈22–28;图标不 clip;focus-visible;确认键盘不回归approval-workorder-page✅approval.spec「工单/审批列表行密度」+ approval-action-keyboard
DesignLayout次屏表密度(JExcel / 版本 diff)JExcel 工具栏 ~24;表头/行 pad 4×8;图标不 clip;focus-visible;diff 组头/行 ~24 token 色;工具栏 Tab / 可视化 diff 不回归jexcel-root / version-diff-panel✅model-design-ux「表设计 JExcel 行密度」+ relation「工具栏 Tab」+ version.spec diff
DesignLayout元数据应用子签密度CodeTab/DbTab 栏 ~24;标签不 clip;子签 Tab focus-visible;Cmd+1/2/3 不回归erd-code-tab / erd-db-tab✅model-design-ux「元数据应用子签」+ relation「表设计 Cmd/Ctrl+1/2/3」
DesignLayout表设计内签密度字段/索引/元数据栏 ~24;标签不 clip;内签 Tab focus-visible;Cmd+1/2/3 不回归erd-table-design__tabs / #tableNav✅model-design-ux「表设计内签」+ relation「表设计 Cmd/Ctrl+1/2/3」
DesignLayout表设计签体内容次密距侧/底 pad 6/4;hint ~24;JExcel 不 clip;元数据 tip 密;空字段 CTA / 空名 toast 保留erd-tab-body-pad / erd-meta-ddl-hint✅model-design-ux「表设计签体内容次密距」+ table-field-empty
DesignLayout设计器空态次密距兜底禁 marginTop:100;字段/索引 Empty margin-block 0 + pad 贴 tab-body;保留 CTAerd-pane-empty / erd-table-*-empty✅model-design-ux「设计器空态次密距」+ table-field-empty
DesignLayout欢迎空态次密距pad 20×16;标题 18/mt12·lh22;hero 176;逆向链 + 左树新增模型erd-welcome-empty / designer-welcome-empty(-inner)✅model-design-ux「欢迎空态次密距」
DesignLayout右键/树操作菜单密度项高 ~28(∈26–30);border-box + padY≤2;图标/文案不 clip;role=menuitem;方向键/Esc.erd-dense-menu✅model-design-ux「右键/树操作菜单密度」
DesignLayout左树键盘漫游Skip→↓入树;方向键+Enter 定位表/开关系;active brand 环;Tab 进搜索无 trapQueryTree.focusKeyboard + handleSelect✅relation「左树键盘漫游」
RF TableNode字段浏览器 Tab 环仅选中表字段/添加/开表设计进序;行内微钮 -1;无 trap + focus-visible键盘建模✅relation「字段浏览器 Tab 环」
RF canvas chromeControls / 工具栏 Tab;MiniMap 出序Controls→工具栏;MiniMap tabindex=-1;Controls focus-visible键盘 chrome✅relation「画布 chrome Tab 序」
RF MiniMappanel chrome 碎距128×96 概览;margin ≈8∈[8,12];sunk 底;禁 RF margin15;Controls 按钮/版本工具条不动ADR-0016 密度✅relation「MiniMap」+ demo
RF Controls / 工具栏 Panelpanel chrome 碎距margin ≈8∈[8,12](禁 RF 默认 15);钮≤22;对齐 MiniMap;版本工具条/边标签不动ADR-0016 密度✅relation「Controls」+ demo
边基数 Select / Entity Form控件密度锁Select 高≤28;项 mb≤12;输入/OK≤28;禁回退 32/24ADR-0016 密度✅relation「PK/FK」+「实体新建弹层密度」
RF 节点级 Tab选中门控;RF wrapper 出序nodesFocusable/edgesFocusable=false;选中表/边 chip/Frame 进序键盘建模✅relation「画布节点级 Tab」
/s/:token 分享壳Skip + Controls Tab首项 Skip「跳到关系图」→ stage;放大/缩小/适应可达;MiniMap 出序;focus-visible;无 trapADR-0016 键盘门面✅share「分享壳键盘」
TableTabCmd/Ctrl+1/2/3表设计:字段 / 索引 / 元数据应用;输入中不拦;仅表设计签挂载TableTab activatePane✅relation「表设计 Cmd/Ctrl+1/2/3」
DesignLayout左树点表定位点表 → 切关系图 + 选中 + fitView + flash;不开表设计DataTable → pendingLocate + focusTable✅relation.spec「左树点表」
ProjectSortMenu创建时间/最近修改已从 Menu 导出删除死代码🗑代码已不存在(grep 零命中)
ProjectFilterMenu过滤1/过滤2已从 Menu 导出删除死代码🗑代码已不存在(grep 零命中)
NavigationMenu(空水平菜单)已从 Menu 导出删除🗑代码已不存在(grep 零命中)

W4 — 版本时光机​

表面控件预期闭环关联链路状态验证
DesignLayout 菜单版本管理→ /design/table/version/all✅project-menu / version / loading
/design/table/version/all新增版本(无数据源)列表可见新版本北极星✅version.spec「新增」
/design/table/version/all返回模型→ /design/table/model?projectId=✅version.spec「返回模型」
/design/table/version/all版本详情 diff增删改着色✅version.spec「diff」
/design/table/version/all重命名/删除版本列表更新+toast;最新版改号成功;重复号 toast 且弹窗不关VersionHandle✅version.spec「重命名与删除」
/design/table/version/all对比版本对比结果可见✅version.spec「可视化 diff」双版比对(version-compare-btn→任意版本比较)
/design/table/version/all回滚落库;刷新后模型仍回滚✅回滚落库;version/approval 绿
DesignLayout 菜单我的工单→ /design/table/version/order 空态引导✅approval.spec
DesignLayout 菜单我的审批→ .../approval 空态引导✅approval.spec
/design/table/version/all顶栏「我的工单/我的审批」直达 order/approval 页W3 切片 3✅approval.spec「提交工单入口」
/design/table/version/all版本行「提交工单」团队未同步行 → 详情「SQL审批」可见W3 切片 3✅approval.spec「提交工单入口」
工单/审批提交→通过/拒绝全链路状态变更可见需有数据✅approval.spec:API 种子→UI 拒绝 toast→工单复批(通过=JDBC 过重未覆盖)
工单/审批通过/拒绝/撤销/复批确认键盘首焦主操作;Esc 不落盘;Tab trapADR-0016 键盘弹层✅approval-action-keyboard
工单/审批SQL 明细 Modal.info 键盘首焦「知道了」;Esc/OK 归还「查看SQL」;Tab trapADR-0016 键盘弹层✅sql-detail-keyboard

W5 — 导入导出 + 数据源​

侧栏导入/导出页​

表面控件预期闭环关联链路状态验证
/design/table/import/reverse逆向解析提交表进入模型ADR-0006✅import-reverse.spec(MySQL reverse_demo)
/design/table/import/reverse解析失败可读 + 重试toast/页内文案;「重新解析」恢复ADR-0016 零静默✅reverse-parse-failure(mock API)
/design/table/import/pdman上传 PdMan模型可见✅import-pdman.spec
/design/table/import/erd上传 ERD模型可见✅import-erd.spec
ReverseERWin解析 ERWin 文件组件已删;菜单未挂stub🗑代码已不存在(grep 零命中)
/design/table/export/common导出 Markdown文件下载无 G6✅export.spec
/design/table/export/common导出 HTML/Word/ERD下载或明确失败✅export.spec HTML+ERD
/design/table/export/more高级导出 DDL有源+表时可进第二步ADR-0008✅project-menu「DDL 第二步」
/design/table/export/moreDDL 终步下载产出 SQL 文件✅project-menu「DDL 下载」

/databaseConfig​

表面控件预期闭环关联链路状态验证
/databaseConfig新建/保存数据源POST dataSources;profile 无 passwordADR-0008✅adr0008-datasource.spec
/databaseConfig测试连接成功/失败 toast✅adr0008-datasource.spec「测试连接」
/databaseConfig编辑/删除/批量删列表更新+确认;行内 aria✅adr0008-datasource「编辑保存 + 删除确认」
/databaseConfig删/批删确认键盘首焦「删除」;Esc 归还不删;Tab trapADR-0016 键盘弹层✅database-config-delete-keyboard
/databaseConfig新建/编辑 Drawer 键盘首焦「连接名称」;Esc 归还触发器;Tab trapADR-0016 键盘弹层✅database-config-drawer-keyboard
/databaseConfig同步状态钮ping + toast + 徽章更新✅adr0008-datasource「同步状态」
/databaseConfig 顶栏「统计」按钮已移除(原无 onClick)死 affordance🗑顶栏无该按钮(仅表单「需要帮助?」文案)
/databaseConfig 顶栏「帮助」按钮已移除(原无 onClick)死 affordance🗑顶栏无该按钮(仅表单「需要帮助?」文案)

W6 — 外围与账户​

表面控件预期闭环关联链路状态验证
DesignLayout 菜单数据域_defaultProps 已摘;路由保留实验页北极星弱✅data-domain.spec;深链见「实验功能」
DesignLayout 菜单查询_defaultProps 已摘;路由保留实验深链exec 忽略所选 DS✅design-query.spec
DesignLayout 菜单Chat SQL侧栏已隐藏;路由保留实验页AI 后置✅W6 裁剪导航
/design/dataDomain页内类型域树实验;不扩主旅程闭环📋不扩 E2E 编辑
/design/table/query页内运行/计划实验;失败有 toast;不扩真·DS SELECT📋不扩 JDBC 查询台
/design/table/chatsql页内发送等实验;不作为北极星闭环📋不扩模型
/design/table/setting/defaultField默认字段保存toast + 新表带默认字段;仅 code===200;失败回滚可重试✅default-field.spec「编辑保存有 toast」;default-field-failure
/design/table/setting/dataType数据类型字典 CRUDadd/update/remove persist:true;仅 save code===200;失败窗 keep✅datatype-domains-failure
/design/table/setting/dataType逻辑类型 apply 方言映射Modal「库方言映射」编 apply[code].type;枚举 buildEnumApply✅datatype-apply-ux
/design/table/setting/dataType新增/编辑类型 Modal 键盘首焦「类型名称」;Esc 归还触发器;Tab trap;提交中禁 EscADR-0016 键盘弹层✅datatype-domains-keyboard
项目菜单 / 导入次屏ERD·PdMan·DBML / 数据源逆向提交setProjectJson/importReverseTable persist;仅 save code===200;失败不写 store✅import-erd-failure(文件);import-reverse(happy)
项目菜单→数据源设置切默认数据源 RadiosetDefaultDb 仅 save code===200;失败 toast+列表回滚✅default-db-failure
版本行→回滚确认回滚仅 save code===200 写 store+「成功回滚」关窗;失败 toast;不关窗可重试;禁先 setModules✅version-revert-failure
默认项设置→下载模板downloadWordTemplate仅非空 ZIP(PK) blob 落盘;空/JSON 错误体 toast、无假 .docx✅word-template-download-failure
导出文件→导出WordPOST /doc/gendocx同 docxBlobGate;空/JSON/非 ZIP toast、无假下载✅word-gendocx-download-failure
/design/table/setting/default系统默认项同项目菜单默认项✅project-menu「默认项设置」
/dataQuery页内运行/CRUD实验;失败有 toast;不扩真·DS SELECT📋不扩 JDBC 查询台
/account/settings基本资料保存toast✅account-settings.spec
/account/settings壳键盘 Skip/TabSkip→主表单;字段→保存;focus-visible;无 trapHomeLayout✅account-settings-keyboard.spec
/account/settings「更换头像」Upload改为「头像上传暂未开放」文案✅W6 去假上传
/account/settings其它 selectKey 页签可切换有内容✅account-settings.spec 头像→security/identification
/project/group/setting/basic保存基本设置toastGroupLayout/W0✅group-basic-setting.spec
/project/group/setting/permission权限组维护成员可见access✅group-layout-nav「权限组」
GroupLayout 菜单返回项目列表→ /dataModels✅group-layout-nav「返回/打开」
GroupLayout 菜单打开模型→ 设计器projectId✅group-layout-nav「返回/打开」
/*404 页未知路径友好提示✅not-found.spec

其它已覆盖横切​

表面控件预期闭环关联链路状态验证
已删认证路径/login/success 等前端无页;后端不可用清死代码✅dead-auth-routes.spec
画布大项目视口裁剪离屏节点不渲染性能预算✅canvas-scale.spec
协作 sync远端改动 toastinfo / warning +「保存版本」→ version/all 落库(≤1/min)ADR-0009✅sync-toast.spec(全路径+节流)
加载骨架列表/设计器/版本aria-busy + 可访问名✅loading.spec
UX 不变量死 affordance/账密全旅程截图+断言✅ux-audit.spec
空 projectJSON团队项目加模型可新增模型✅empty-projectjson.spec

统计(v1 初版)​

状态行数
✅93
🚧0
🗑6
📋6
合计105

📋 延期(本阶段不啃):论坛外链、VIP 角标、dataDomain / query / chatsql / dataQuery。
Vision loop:矩阵 🚧=0 时,优先可行动矩阵 📋 或 roadmap 下一 📋(Issue seed / AI),见 scripts/agent-loop-vision.prompt.md。