Skip to content

feat(observer): 导轨画每条泳道自己声明的花符(WUI-03 gap 10 的图标半片) - #232

Merged
DTALEX66 merged 2 commits into
mainfrom
feat/lane-icon-set-in-rail-20261029
Oct 28, 2026
Merged

DTALEX66 merged 2 commits into
mainfrom
feat/lane-icon-set-in-rail-20261029

Conversation

@DTALEX66

@DTALEX66 DTALEX66 commented Oct 28, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • 成因与旧判词不同:apps/observer/frontend/src/lib/viewRegistry.ts 的 32 条泳道行一直各自声明一枚 Lucide 花符(30 枚不同,两处重复是注册表自己的配对约定:executions/execution-detail 共用 PlayCircle、privacy/trust 共用 ShieldCheck),但那个字段零消费者——全仓除注册表自身外的 .icon 命中逐条读过后全是 CSS 类名 .empty .icon。导轨画的是 31 枚一模一样的 .nav-dot。所以 DESIGN.md gap 10 那句「rail has no per-lane icon set」在数据上从来不成立、在屏幕上成立:一个只有声明没有消费者的字段,源码级 grep 一律读成"已交付"。
  • 改法:apps/observer/frontend/src/components/layout/Sidebar.tsx 的 LaneDef 带上 icon,行内用该道自己声明的花符替换装饰点而不是并列加一枚。这个选择是被上一次失败逼出来的——gap 10 记录的旧尝试为了变窄把 .truncate 藏起来,结果 23 条泳道成了 23 个无法区分的点;加第二枚 15px 方块会挤掉标签,删装饰点不会(它 aria-hidden、无状态样式、无测试或门读它)。.nav-dot 规则留在被 D-11 钉死的 apps/observer/frontend/src/skins/b10.css 里逐字节不动。
  • 首页那条合成泳道(overview/标签 项目监控)没有注册表行,花符因此与标签同处一个所有者:新增 OVERVIEW_ICON,取 monitoring 那枚 Activity 而不是新造第 31 枚。
  • 没有顺手做的一条:导轨现在可以有意变窄而不必删信息,但要不要窄是 owner 对专业壳的决定,本轮不动宽度。

Test plan

  • 改前/改后各量一次(.project-local/runs/live-probe-20261029/rail_truncation_probe.py):rows=31 glyphs=0 truncated=0 → rows=31 glyphs=31 truncated=0,glyph 实宽 15px、导轨宽两侧相同
  • 看渲染图确认:.project-local/runs/live-probe-20261029/rail-after-icons.png(每道一枚可区分图形、标签一个没少、选中行渐变与左侧强调条不受影响)
  • 新守卫 apps/observer/frontend/src/laneIcons.contract.test.tsx 5 例(行集==注册表行集、每行恰一枚且等于该行声明的那一枚、装饰点不再出现、加图形不许丢名字、导轨可区分度==数据可区分度)
  • 反证:删掉行内 <l.icon/> → 2 例指名 FAIL、其余 3 例仍绿;还原后源文件 sha256 b4bd0bf3… 与植入前逐字节相同
  • npx vitest run 79 文件 / 970 例;npx tsc --noEmit 无输出;node apps/observer/tests/run_all_tests.js 39 passed / 0 failed
  • 真 Chromium 四门:GEOMETRY_GATE_PASS(含 900×600 下限面)、LEGIBILITY_GATE_PASS(CI 形状 --all-views --live-backend --sizes 1280 --shell-surfaces,AA 失败 0)、PRESSED_MOTION_GATE_PASS(console/.nav button 覆盖仍 40)、HUD_STRIP_GATE_PASS checks=81/81
  • 账本门:AUTHORITY_INDEX_PATHS_TOTAL broken=0 failed_targets=0、DOC_CITATIONS rewritten=0 blocked=0、REGISTER_TABLE_SHAPE rows=42 wrong_width=0、LIVE_DOC_PATHS missing=0、清单重发后 test_tool_inventory_coverage.py Ran 16 tests OK

叠合后复跑(#231 合并进 main、本分支 rebase 之后,head d4aeb493):npx vitest run 78 文件 / 969 例(与 #231 合并前基线 79/970 的差值恰为 #231 删掉的 1 文件 1 例);重新构建后四道浏览器门在同一份新包上复跑 GEOMETRY_GATE_PASS、PRESSED_MOTION_GATE_PASS(console/.nav button 覆盖仍 40)、HUD_STRIP_GATE_PASS checks=81/81、LEGIBILITY_GATE_PASS,并顺带跑 #231 那道 REDUCED_MOTION_FLOOR_GATE_PASS surfaces=5 checks=17/17;清单重发 trackedTools=83 unclaimed=0、覆盖测试 16 例 OK。

viewRegistry 的 32 条泳道行一直各自声明一枚 Lucide 花符,而那个字段零消费者:
导轨画的是 31 枚一模一样的 .nav-dot,所以任何源码级 grep 都读成「已交付」。
花符替换装饰点而不是并列加一枚——gap 10 记录的旧尝试为了变窄藏起 .truncate,
结果是 23 个无法区分的点;加第二枚 15px 方块会挤掉标签,删装饰点不会。

实测:31/31 行有花符、标签截断 0→0、几何/可读性/按下态/窄条四门读数不变。
守卫 laneIcons.contract.test.tsx 5 例,反证(删掉行内图形)转出 2 例具名 FAIL。
DESIGN.md gap 10 与 WUI-03 状态位按实测改判;导轨宽度是否收窄仍是 owner 决定,本轮不动。
#231 合并后本分支 rebase:浏览器四门与新的 reduced-motion 门在同一份重建包上
复跑全绿,前端套件的差值(79/970 → 78/969)正是 #231 删掉的那 1 文件 1 例——
先量差再报数,不拿旧绿冒充新树。
@DTALEX66
DTALEX66 force-pushed the feat/lane-icon-set-in-rail-20261029 branch from ca84d3c to d4aeb49 Compare October 28, 2026 20:49
@DTALEX66
DTALEX66 merged commit 0d6d8b3 into main Oct 28, 2026
12 checks passed
@DTALEX66
DTALEX66 deleted the feat/lane-icon-set-in-rail-20261029 branch October 28, 2026 21:09
DTALEX66 added a commit that referenced this pull request Oct 28, 2026
docs(register): 本轮(2026-10-28/29 队列)收口:PR #232 合并回执 + 按 PR 逐件对号
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant