t102-topbar-menu.mjs 2.0 KB

123456789101112131415161718192021222324252627282930313233
  1. /**
  2. * 票 102 静态闸门(一):顶栏三个诊断读数下屏,且不留半截改动。
  3. *
  4. * 接缝:外壳单文件源码契约 —— 模板节点 / import / 死状态 / CSS 类名必须同时消失。
  5. * 只删模板会留下死样式与死 import,只删样式会留下「有节点没画法」的裸标签。
  6. * 可传源码路径复核历史版本(例如提交时的暂存副本)。
  7. */
  8. import assert from 'node:assert/strict'
  9. import fs from 'node:fs'
  10. const source = process.argv[2]
  11. ? fs.readFileSync(process.argv[2], 'utf8')
  12. : fs.readFileSync(new URL('../src/modules/cockpit/CockpitShell.vue', import.meta.url), 'utf8')
  13. // ---- 三个读数:模板、样式、数据来源一起下屏 ----
  14. assert.ok(!source.includes('只读视图'), '「只读视图」必须下屏')
  15. assert.ok(!source.includes('配置就绪'), '「配置就绪 · 数据源」必须下屏')
  16. assert.ok(!source.includes('cockpit-shell__config'), '配置读数容器(模板/样式)不得残留')
  17. assert.ok(!source.includes('configStatusView'), '配置读数展示层不得残留')
  18. assert.ok(!source.includes('StatusTag'), 'StatusTag 只服务配置读数,必须一并移除')
  19. assert.ok(!source.includes('cockpit-shell__meta'), '「当前模式」读数不得残留')
  20. // ---- 配置判定本身仍在用,不能顺手删 ----
  21. assert.ok(source.includes('configState.value'), '配置判定仍被地图配置/降级说明使用,不能删')
  22. // 反方向也要守:读数的「载入前不闪标签」闸门随读数一起变成死状态。
  23. assert.ok(!source.includes('configLoaded'), '拉取态闸门随读数下屏,不得留下无人读的状态')
  24. // ---- 一级模式导航语义不动 ----
  25. assert.ok(source.includes('aria-label="一级模式"'), '一级模式导航保持原样')
  26. assert.ok(source.includes('v-for="item in MODES"'), '一级模式导航保持原样')
  27. assert.ok(source.includes('@click="uiStore.setMode(item)"'), '一级模式导航保持原样')
  28. console.log('t102-topbar-menu: 13/13')