@qilitt-mickey/vue3-temp-skill 1.1.54 → 1.1.56

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/SKILL.md CHANGED
@@ -51,7 +51,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
51
51
  | `files-and-editors` | 附件、预览、下载、富文本、二维码 | `file-management.md`、`download-export.md`、`rich-text.md`、`qrcode-barcode.md` |
52
52
  | `realtime-and-mobile` | WebSocket、移动端、微信、验证码、动效 | 对应专项 reference |
53
53
  | `data-compare` | 编辑页变更对比和汇总 | `data-compare.md` |
54
- | `design-apply` | 设计变更集落地:语义 ID 三级匹配、结构/形态/两层样式转换、锚点与结构施工、覆写提权、渲染态验收、合规闸门 | `design-apply.md`、`mapping/`、`parser/` |
54
+ | `design-apply` | 设计变更集落地:语义 ID 三级匹配、结构/形态/两层样式转换、锚点与结构施工、覆写提权、渲染态验收、合规闸门。**主入口 `design-apply.md`(红线+契约+步骤索引),各步骤拆分册 `references/steps/`——做到哪一步读哪一份,禁止一次全部通读** | `design-apply.md`、`steps/`、`mapping/`、`parser/` |
55
55
 
56
56
  ## 工作流
57
57
 
@@ -101,6 +101,7 @@ tags: [vue3, typescript, element-plus, pinia, vite, unocss, crud, demo, code-qua
101
101
  目标项目源码 = **中性初始化**,只提供能力通道(CSS 变量的消费者挂载点、form 枚举、DOM/属性钩子、正确的层叠优先级),**不预置任何具体设计的结论**(某个颜色、某句问候语、某个方位的指示条、某个硬编码尺寸)。
102
102
 
103
103
  - 一切设计决策由设计变更集驱动,经 `design-apply` 动态落到「设计层文件 `src/styles/design-shell.scss` / 页面级 scoped 样式 / DOM 属性与配置」,不落到出厂样式文件与出厂组件里。
104
+ - **效果图页面 = 设计角色坐标系,不是页面增量(G13 页面绑定闸)**:效果图页面(如「运单管理」)是设计侧为承载设计语言虚构的演示标题,**默认映射到项目已有页面**——落地动作恒为「在已有页面上同步结构与样式」,**禁止因效果图新增页面 / 路由 / 菜单项**;唯一例外是变更集 `page_bindings` 显式声明 `target:"new"` 且在 `notes` 申报。判据:换一张效果图不需要改项目的页面/路由/菜单清单 ⇒ 架构正确;需要新增页面才能换 ⇒ 设计演示页被误当业务增量,必须回退。
104
105
  - 判据:换一张效果图只需换变更集、不必改源码 ⇒ 架构正确;需要改源码才能换 ⇒ 设计结论被烧进源码,必须回退为通道。
105
106
  - 出厂文件仅在「通道缺失」时可动(补变量消费者 / 补 form 枚举 / 修层叠优先级),且必须在交付说明中单列「补通道」条目写明缺失点。
106
107
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qilitt-mickey/vue3-temp-skill",
3
- "version": "1.1.54",
3
+ "version": "1.1.56",
4
4
  "type": "module",
5
5
  "description": "Vue 3 企业级中后台项目开发规范技能包 — core-kernel 架构、按需功能模块",
6
6
  "bin": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "generated_at": "2026-09-22T01:04:15.248Z",
2
+ "generated_at": "2026-09-22T04:18:44.676Z",
3
3
  "oracle": "E:\\work\\Project\\Template\\skills\\vue3-temp-skill\\parser\\fixtures\\verify\\oracle.json",
4
4
  "actual": "E:\\work\\Project\\Template\\skills\\vue3-temp-skill\\parser\\fixtures\\verify\\actual-clean.json",
5
5
  "points": {
package/parser/index.js CHANGED
@@ -292,6 +292,54 @@ function matchOne(file, dataset, batchSummary, opts = {}) {
292
292
  console.log(` ✔ G8 模式闸:mode=restore,oracle + coverage 齐备(基线三件套完整)`);
293
293
  }
294
294
 
295
+ // G13 页面绑定闸(2026-09-22 事故机制化):效果图页面是设计角色坐标系,不是页面增量。
296
+ // 事故背景:效果图演示页「运单管理」被误落地为项目新菜单/新页面——效果图标题只是
297
+ // 设计侧为承载设计语言虚构的演示名,落地动作恒为「映射已有页面 + 在其上同步结构与样式」,
298
+ // 「图上有这个页面」不构成新增依据。
299
+ // 机检范围(diff 级「不得出现新路由/菜单/页面文件」由第 5 步合规闸人工+AI 对账):
300
+ // ① page_bindings 结构校验(数组、mockup/target 必填);
301
+ // ② target:"new" 必须 notes 申报——未申报 = 效果图演示页被静默实体化,exit 1;
302
+ // ③ 每次输出页面绑定声明,让施工 AI 与交付说明都有映射口径可依。
303
+ const DEFAULT_BINDING_POLICY = "效果图页面默认映射已有页面(设计角色坐标系≠页面增量):禁止新增页面/路由/菜单,落地=在已有页面上同步结构与样式";
304
+ if (changeset.page_bindings !== undefined && changeset.page_bindings !== null) {
305
+ if (!Array.isArray(changeset.page_bindings)) {
306
+ console.error(`✖ G13 页面绑定闸:page_bindings 应为数组({ mockup, target, note }),实际 ${typeof changeset.page_bindings} → 拒绝执行。`);
307
+ batchSummary?.invalid.push(path.basename(file));
308
+ if (!batchSummary)
309
+ process.exit(1);
310
+ return;
311
+ }
312
+ console.log(`\n=== 页面绑定声明(G13 · ${changeset.page_bindings.length} 条)===`);
313
+ for (const [i, b] of changeset.page_bindings.entries()) {
314
+ if (!b || typeof b !== "object" || !b.mockup || !b.target) {
315
+ console.error(`✖ G13 页面绑定闸:page_bindings[${i}] 缺 mockup 或 target → 拒绝执行。`);
316
+ batchSummary?.invalid.push(path.basename(file));
317
+ if (!batchSummary)
318
+ process.exit(1);
319
+ return;
320
+ }
321
+ if (b.target === "new") {
322
+ const notes = typeof changeset.notes === "string" ? changeset.notes : "";
323
+ if (!notes.includes("新增页面") && !notes.includes("new 页面") && !notes.includes("target:\"new\"")) {
324
+ console.error(`✖ G13 页面绑定闸:${b.mockup} 声明 target:"new"(新增业务页面)但 notes 未申报 → 拒绝执行。`);
325
+ console.error(` 处置:确需落成新业务页面时,在 notes 显式写明「新增页面:<mockup> → <路由名>,理由…」后重跑;`);
326
+ console.error(` 否则该效果图页面按默认口径映射已有页面落地。`);
327
+ batchSummary?.invalid.push(path.basename(file));
328
+ if (!batchSummary)
329
+ process.exit(1);
330
+ return;
331
+ }
332
+ console.log(` - ${b.mockup} → 新增页面(notes 已申报)`);
333
+ }
334
+ else {
335
+ console.log(` - ${b.mockup} → 已有页面 ${b.target}${b.note ? `(${b.note})` : ""}`);
336
+ }
337
+ }
338
+ }
339
+ else {
340
+ console.log(` ✔ G13 页面绑定闸:page_bindings 缺省 → ${DEFAULT_BINDING_POLICY}`);
341
+ }
342
+
295
343
  // 版本校验(mapping_version 缺失或不匹配 → 拒绝。版本恒定 1.0.0,此校验为破坏性升级保险丝:仅双侧同步升版时才会拦截)
296
344
  const versions = new Set(
297
345
  Object.values(dataset.files).map(d => d.meta?.version).filter(Boolean),