@agile-team/wl-skills-ui 1.10.1 → 1.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,21 @@ All notable changes to **@agile-team/wl-skills-ui** will be documented in this f
4
4
 
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [1.10.2] - 2026-08-15
8
+
9
+ ### Fixed
10
+
11
+ - `AUTO_STATUS_RULES` 匹配纪律收紧(语义正确性,零性能开销):
12
+ - 单字词锚定——`^待` / `^(?:无|否|未)$`,业务文案「招待费」「无票运输」「未税」不再被误判为状态 Tag;
13
+ - 「未X」词表先行拦截(未通过=danger / 未完成·未启用等=info),防止 success 组的 完成/通过/启用/达标 子串反向误命中「未完成/未通过」;
14
+ - 刻意不使用后行断言(旧 Safari 解析期报错,库代码不可引入)。
15
+ - `docs/governance-long-term.md` 修正 `.wl-exempt.example.json` 陈旧根路径为实际发布路径 `examples/`。
16
+
17
+ ### Added
18
+
19
+ - `npm run test:coverage`:Node 内建 `--experimental-test-coverage` 覆盖率报告(零新增依赖,仅报告不设门禁)。
20
+ - `publish.yml` 发布工作流(GitHub Release 触发:tag-版本一致性校验 + verify + pack 预检 + npm publish);视觉回归因快照基线为 win32 平台专属暂不入 Linux 发布路径,跨平台基线补齐后再追加。
21
+
7
22
  ## [1.10.1] - 2026-08-15
8
23
 
9
24
  ### Fixed
package/README.md CHANGED
@@ -227,7 +227,12 @@ yarn add @agile-team/wl-skills-ui
227
227
 
228
228
  ## 版本亮点
229
229
 
230
- 当前 v1.10.1
230
+ 当前 v1.10.2
231
+
232
+ - **判色纪律收紧**:单字状态词锚定(`待`/`无`/`否`/`未` 仅按词头或整词命中),「招待费」「无票运输」类业务文案不再误判;「未X」先行拦截,`未完成/未通过` 不再被子串反向误命中;不使用后行断言(旧 Safari 兼容)。
233
+ - **工程闭环补强(零运行时开销)**:`test:coverage` 内建覆盖率报告(零依赖);`publish.yml` Release 触发的自动发布(tag 校验 + verify 门禁)。
234
+
235
+ 上一版 v1.10.1:
231
236
 
232
237
  - **存量改造债务清偿**:新增 `runtime/__tests__`(25 个用例覆盖默认对齐与自动判色,`npm test` 统一纳管);`verify:package` 增加 `dist/tokens.css` 与 `design/tokens/base.css` 逐字节同步守卫;补 GitHub Actions CI(Ubuntu 22/24 + Windows 24 矩阵跑 `pnpm verify`);清理仓库残留 tgz 与空目录,`mcp/README.md` 声明 server.js 冻结状态。
233
238
  - **分组列对齐语义修正**:`ensureDefaultAlignment` 对声明式分组列只递归子列、不补自身 `align`(分组行无叶子单元格)。
@@ -172,7 +172,7 @@ npx wl-ui audit --target src --refresh-baseline
172
172
  git add .wl-baseline.json
173
173
 
174
174
  # 4. 豁免(如有)
175
- cp node_modules/@agile-team/wl-skills-ui/.wl-exempt.example.json .wl-exempt.json
175
+ cp node_modules/@agile-team/wl-skills-ui/examples/wl-exempt.example.json .wl-exempt.json
176
176
  # 编辑为本项目实际豁免路径
177
177
 
178
178
  # 5. CI 加 PR gate
@@ -168,10 +168,12 @@ function renderDictClassifyTag(value, dictKey, typeColorMap) {
168
168
  );
169
169
  }
170
170
  var AUTO_STATUS_RULES = [
171
+ [/未通过|未达标|未合格/, "danger"],
172
+ [/未启用|未激活|未完成|未处理|未审批|未核实|未提交|未确认|未支付|未领用/, "info"],
171
173
  [/驳回|拒绝|停用|作废|报废|超标|异常|超期|逾期|不合格|失效|无效|惩罚|隐患/, "danger"],
172
174
  [/已完成|已结束|完成|正常|有效|启用|合格|达标|通过|已处置|已确认|已审批|在用|使用中|奖励/, "success"],
173
- [/待|进行中|审批中|整改中|处置中|评估中|调查|预警|管控|注意/, "warning"],
174
- [/新建|未开始|草稿|暂存|历史|撤回|无|否|未/, "info"]
175
+ [/^待|进行中|审批中|整改中|处置中|评估中|调查|预警|管控|注意/, "warning"],
176
+ [/新建|未开始|草稿|暂存|历史|撤回|^(?:无|否|未)$/, "info"]
175
177
  ];
176
178
  var AUTO_CLASSIFY_RULES = [
177
179
  [/危废|危险|惩罚|事故|气态/, "danger"],
@@ -1,7 +1,7 @@
1
1
  import * as vue from 'vue';
2
2
  import { VNode } from 'vue';
3
3
  import { T as TagMapItem, J as JhTagNode } from './types-DtmxwMWV.js';
4
- export { r as registerDictColorMap, a as registerDictColorMaps, b as renderDictClassifyTag, s as setDictResolver } from './renderers-DKcXOFnF.js';
4
+ export { r as registerDictColorMap, a as registerDictColorMaps, b as renderDictClassifyTag, s as setDictResolver } from './renderers-ONyz3P5K.js';
5
5
 
6
6
  declare const RISK_LEVEL_MAP: Record<string | number, TagMapItem>;
7
7
  declare const renderRiskLevel: (v: string | number | null | undefined) => JhTagNode | null;
@@ -1,6 +1,6 @@
1
1
  import { installUiRuntimeGuards } from './chunk-QLPJLXY6.js';
2
- import { renderTagNode, renderClassifyTag, registerColumnAutoMaps, renderRatingLevel, renderBadge } from './chunk-DFLSWJA3.js';
3
- export { registerDictColorMap, registerDictColorMaps, renderDictClassifyTag, setDictResolver } from './chunk-DFLSWJA3.js';
2
+ import { renderTagNode, renderClassifyTag, registerColumnAutoMaps, renderRatingLevel, renderBadge } from './chunk-KCVRDXIH.js';
3
+ export { registerDictColorMap, registerDictColorMaps, renderDictClassifyTag, setDictResolver } from './chunk-KCVRDXIH.js';
4
4
  import './chunk-Q3N5QNRZ.js';
5
5
 
6
6
  // runtime/presets/common.ts
package/es/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import { C as ColumnLike } from './types-DtmxwMWV.js';
2
2
  export { E as ElTagType, J as JhTagNode, a as OpChip, O as OpItem, b as OpLink, c as OpPreset, T as TagMapItem } from './types-DtmxwMWV.js';
3
- export { A as AUDIT_STATUS_MAP, c as AUTO_CLASSIFY_RULES, d as AUTO_STATUS_RULES, E as ENABLE_STATUS_MAP, R as RATING_LEVEL_COLORS, V as VERIFY_STATUS_MAP, e as autoTagTypeByLabel, r as registerDictColorMap, a as registerDictColorMaps, f as renderAuditStatus, g as renderAutoTag, h as renderAutoTagByLabel, i as renderBadge, j as renderClassifyTag, k as renderCountBadge, l as renderDangerText, b as renderDictClassifyTag, m as renderEnableStatus, n as renderOps, o as renderRatingLevel, p as renderTagNode, q as renderTagSlot, t as renderVerifyStatus, s as setDictResolver } from './renderers-DKcXOFnF.js';
3
+ export { A as AUDIT_STATUS_MAP, c as AUTO_CLASSIFY_RULES, d as AUTO_STATUS_RULES, E as ENABLE_STATUS_MAP, R as RATING_LEVEL_COLORS, V as VERIFY_STATUS_MAP, e as autoTagTypeByLabel, r as registerDictColorMap, a as registerDictColorMaps, f as renderAuditStatus, g as renderAutoTag, h as renderAutoTagByLabel, i as renderBadge, j as renderClassifyTag, k as renderCountBadge, l as renderDangerText, b as renderDictClassifyTag, m as renderEnableStatus, n as renderOps, o as renderRatingLevel, p as renderTagNode, q as renderTagSlot, t as renderVerifyStatus, s as setDictResolver } from './renderers-ONyz3P5K.js';
4
4
  import 'vue';
5
5
 
6
6
  type ColumnAlignment = "left" | "center" | "right";
package/es/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  export { SPLIT_GRID_RESIZE_EVENT, installOverflowTooltipGuard, installSplitGridResizeGuard, installUiRuntimeGuards, uninstallOverflowTooltipGuard, uninstallSplitGridResizeGuard } from './chunk-QLPJLXY6.js';
2
- import { registerColumnAutoMaps } from './chunk-DFLSWJA3.js';
3
- export { AUDIT_STATUS_MAP, AUTO_CLASSIFY_RULES, AUTO_STATUS_RULES, ENABLE_STATUS_MAP, RATING_LEVEL_COLORS, VERIFY_STATUS_MAP, autoTagTypeByLabel, clearColumnAutoMap, defineColumns, ensureDefaultAlignment, getColumnAutoMap, normalizeColumnAlignment, normalizeColumnAlignments, normalizeColumnAlignmentsWith, registerColumnAutoMap, registerColumnAutoMaps, registerDictColorMap, registerDictColorMaps, renderAuditStatus, renderAutoTag, renderAutoTagByLabel, renderBadge, renderClassifyTag, renderCountBadge, renderDangerText, renderDictClassifyTag, renderEnableStatus, renderOps, renderRatingLevel, renderTagNode, renderTagSlot, renderVerifyStatus, setDictResolver } from './chunk-DFLSWJA3.js';
2
+ import { registerColumnAutoMaps } from './chunk-KCVRDXIH.js';
3
+ export { AUDIT_STATUS_MAP, AUTO_CLASSIFY_RULES, AUTO_STATUS_RULES, ENABLE_STATUS_MAP, RATING_LEVEL_COLORS, VERIFY_STATUS_MAP, autoTagTypeByLabel, clearColumnAutoMap, defineColumns, ensureDefaultAlignment, getColumnAutoMap, normalizeColumnAlignment, normalizeColumnAlignments, normalizeColumnAlignmentsWith, registerColumnAutoMap, registerColumnAutoMaps, registerDictColorMap, registerDictColorMaps, renderAuditStatus, renderAutoTag, renderAutoTagByLabel, renderBadge, renderClassifyTag, renderCountBadge, renderDangerText, renderDictClassifyTag, renderEnableStatus, renderOps, renderRatingLevel, renderTagNode, renderTagSlot, renderVerifyStatus, setDictResolver } from './chunk-KCVRDXIH.js';
4
4
  export { BRAND_THEME_TOKENS, installBrandThemeLock } from './chunk-Q3N5QNRZ.js';
5
5
 
6
6
  // runtime/presets/registry.ts
@@ -1,4 +1,4 @@
1
- import { renderTagNode, registerDictColorMaps, registerColumnAutoMaps } from '../chunk-DFLSWJA3.js';
1
+ import { renderTagNode, registerDictColorMaps, registerColumnAutoMaps } from '../chunk-KCVRDXIH.js';
2
2
  import { installBrandThemeLock } from '../chunk-Q3N5QNRZ.js';
3
3
 
4
4
  // runtime/presets/security.ts
@@ -34,7 +34,14 @@ declare function registerDictColorMap(dictKey: string, colorMap: Record<string,
34
34
  declare function registerDictColorMaps(maps: Record<string, Record<string, string>>): void;
35
35
  /** 渲染动态字典分类 Tag,适用于 logicType=dict 的类型/来源/方式/规则类型等列 */
36
36
  declare function renderDictClassifyTag(value: string | number | null | undefined, dictKey: string, typeColorMap?: Record<string, string>): VNode | null;
37
- /** 状态类关键词 → 实心 Tag 颜色(顺序即优先级:危险 > 成功 > 警示 > 中性) */
37
+ /** 状态类关键词 → 实心 Tag 颜色(顺序即优先级:负向未达 > 未X中间态 > 危险 > 成功 > 警示 > 中性)
38
+ *
39
+ * 匹配纪律(wl-ui-ep 实战复盘):
40
+ * - 单字词必须锚定:`^待`(待处理/待审批…但不匹配「招待费」)、`^(?:无|否|未)$`
41
+ * (仅整词命中,不匹配「无票运输」「未税」);
42
+ * - 「未X」词表先行拦截,防止 success 组的 完成/通过/启用/达标 子串
43
+ * 误命中「未完成/未通过/未启用/未达标」反向语义;
44
+ * - 不使用后行断言(lookbehind)——旧版 Safari 解析期即报错,库代码不可引入。 */
38
45
  declare const AUTO_STATUS_RULES: Array<[RegExp, string]>;
39
46
  /** 分类/级别/形态类关键词 → 镂空 Tag 颜色 */
40
47
  declare const AUTO_CLASSIFY_RULES: Array<[RegExp, string]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/wl-skills-ui",
3
- "version": "1.10.1",
3
+ "version": "1.10.2",
4
4
  "description": "企业级 UI 风格对齐框架 — Vue + Element Plus 项目通用化妆/原生双模式(tokens / element / vendors / layouts / runtime / scanner / fixer / skills)",
5
5
  "type": "module",
6
6
  "main": "./es/index.js",
@@ -64,7 +64,8 @@
64
64
  "verify": "npm run lint && npm test && npm run check:scss && npm run docs:check && npm run build && npm run verify:package",
65
65
  "pack:dry": "npm pack --dry-run --ignore-scripts",
66
66
  "release:check": "npm run verify && npm run test:visual && npm pack --dry-run --ignore-scripts",
67
- "prepublishOnly": "npm run release:check"
67
+ "prepublishOnly": "npm run release:check",
68
+ "test:coverage": "node --test --experimental-test-coverage scanner/__tests__/*.test.mjs runtime/__tests__/*.test.mjs"
68
69
  },
69
70
  "files": [
70
71
  "dist",