fix: 收紧CSS所有权与历史兼容门禁
This commit is contained in:
@@ -37,7 +37,7 @@
|
||||
- `npm run format:check`:增量Prettier现同时覆盖CSS。
|
||||
- `npm run style:check`:对全部CSS执行Stylelint;迁移前已存在的文件使用显式兼容范围,新CSS默认严格执行标准规则。
|
||||
- `npm run css:verify`:验证`global.css`不得重建、固定导入顺序、AST基线、选择器顺序、`!important`增长、宽泛业务标签规则和import所有权,并执行允许/拒绝样例测试。
|
||||
- `.github/workflows/css-quality.yml`:PR和main推送均以完整提交范围运行格式、Stylelint和CSS治理门禁。
|
||||
- `.github/workflows/css-quality.yml`:PR使用目标提交与HEAD的merge-base,main推送使用事件before提交;首次推送使用空树,覆盖一次推送中的全部提交。
|
||||
- Git归档或部署候选目录没有`.git`时,门禁仍执行当前树的所有权、AST、选择器顺序和例外检查,仅跳过无法取得基线的增量文件比较。
|
||||
|
||||
## 维护边界
|
||||
@@ -46,3 +46,19 @@
|
||||
- 14个迁移模块只用于承接已登记的历史规则;新增规则应先判断页面、业务域或公共组件所有权,不得因类名前缀相似直接追加。
|
||||
- 不得重新创建 `global.css`、扩大Stylelint兼容文件范围或增加无登记例外。
|
||||
- 迁移模块后续按真实页面证据继续细化时,必须同步更新机器基线,并保持主CSS产物或关键计算样式等价。
|
||||
|
||||
## 2026-09-05 门禁复核与修复
|
||||
|
||||
首次迁移完成的是原序分文件,14个模块仍由全局入口加载,响应式尾段仍跨业务域。页面根节点隔离和按所有者进一步收拢是后续工作,不能把文件删除或既有门禁通过等同于完整架构治理完成。本次只修复门禁,不移动、删除或改写应用CSS,不改变业务API、数据库和短信链路。
|
||||
|
||||
复核发现原Stylelint配置使用目录通配符,原所有权检查只搜索文件名,AST计数未覆盖声明值和媒体条件,main推送只比较最后一个提交。现改为:
|
||||
|
||||
- `tools/quality/css-ownership.json`逐文件登记真实import所有者,Stylelint兼容范围必须与清单中的精确路径一致。新文件不会因进入`styles/`或`domains/`自动继承兼容配置。
|
||||
- TypeScript AST解析静态import/export和字面量动态import,PostCSS解析CSS import;解析实际路径并从`src/main.tsx`检查可达性。注释、文件名字符串、同名异目录文件、孤立循环或未被入口引用的所有者不能代替真实引用。当前仅支持仓库使用的相对路径和`@/`别名;新加载机制须同步扩展解析器和拒绝样例。
|
||||
- 新CSS必须登记`roots`,根类必须出现在直接TSX所有者的`className`中;每个选择器首个复合选择器须含正向根类,禁止用`:not`、`:has`或根节点同级选择器冒充作用域。根类后的后代和直接子节点可用;仅通过`:is/:where`提供根类的写法暂不接受。该检查证明静态约束,无法代替实际DOM层级、Portal、动态类名和三尺寸浏览器验收。
|
||||
- 历史文件登记包含声明值、声明顺序、`!important`和媒体/其他at-rule条件的AST摘要,并明确兼容原因、清理条件。注释和节点外格式不影响摘要,CRLF/LF统一;值内部换行等变化可能要求人工确认。新文件不允许通过随手补历史摘要绕过作用域;历史摘要变更必须附设计或等价证据,由代码审查确认。
|
||||
- 已有、具备页面根类的`ReportMaterialImportModal.css`直接执行新规则;其他已登记历史文件保持现状,不在本次门禁修复中扩张视觉改造范围。
|
||||
- 无`.git`的部署归档也执行完整清单、真实引用、根类、声明摘要、固定入口顺序及例外范围检查;仅跳过Git增量比较。
|
||||
- 拒绝样例覆盖新目录文件的实际Stylelint结果、假import、不可达与缺失路径、错误所有者、未落入className的根类、无根标签/状态/同级逃逸、声明和断点篡改、未登记文件、归档模式以及CRLF/LF兼容。
|
||||
|
||||
后续修改已有CSS时先确认所有者:页面私有规则迁至页面目录,公共规则按消费者确定组件归属;保持原效果的迁移提供产物或计算样式等价证据,有意视觉调整提供设计依据及真实页面验收后再更新摘要。不得为了门禁变绿批量重算全部摘要。330次重复选择器出现包含有效响应式覆盖,不按重复次数直接删除。
|
||||
|
||||
@@ -5063,6 +5063,12 @@ npm run verify:phase8
|
||||
| TC-CSS-MOD-004 | 修改TS/TSX或新增CSS后运行增量格式检查 | 实际变更的CSS进入Prettier;Stylelint对未登记新文件执行严格规则,历史兼容范围不会自动扩大 |
|
||||
| TC-CSS-MOD-005 | 分别首次进入、刷新及跨路由打开核心运营端和客户端页面 | CSS资源无404,无框架错误层和新增控制台错误;布局、弹窗、下拉框、Sticky表头、状态记录及字段卡片与迁移前一致 |
|
||||
| TC-CSS-MOD-006 | 在1600×1000、1366×768和390×844检查核心页面 | 页面无新增横向溢出、遮挡、错位或层级问题,窄屏交互仍可访问 |
|
||||
| TC-CSS-MOD-007 | 在styles和domains目录新增未登记CSS,或给Stylelint兼容清单添加通配符 | 新文件保持严格Stylelint规则;所有权门禁拒绝未登记文件及兼容范围扩张 |
|
||||
| TC-CSS-MOD-008 | 仅在注释/字符串中写CSS文件名,引用同名错误路径,或从不可达TSX导入CSS | 均被拒绝;正确相对路径、@/别名、静态/字面量动态import和入口可达关系通过 |
|
||||
| TC-CSS-MOD-009 | 新CSS登记根类后使用无关类、body button、* button、h1、独立selected、:has/:not或根类同级选择器 | 门禁拒绝;直接TSX所有者包含根className且选择器约束在根本身、后代或直接子节点时通过 |
|
||||
| TC-CSS-MOD-010 | 不改变规则和声明计数,仅修改历史CSS颜色、断点、声明顺序或important | AST内容摘要检查失败;单纯CRLF/LF转换通过,避免Windows和Linux归档差异 |
|
||||
| TC-CSS-MOD-011 | 在无.git归档执行门禁,并构造错误import、声明变化、新important和未登记CSS | 完整静态检查仍拒绝违规,不能因为跳过Git增量比较而放行 |
|
||||
| TC-CSS-MOD-012 | 一次推送包含多个提交,违规或格式问题位于非最后提交 | CI使用push事件before至HEAD完整范围;PR使用merge-base;首次推送使用空树 |
|
||||
|
||||
## TC-ADMIN-ENHANCEMENT-20260904 运营看板与配置交互增强
|
||||
|
||||
|
||||
@@ -4530,3 +4530,13 @@ git diff --check
|
||||
- 三条短信相关Redis Stream发布前后逐项一致:`gateway.submit.commands`为`last-delivered-id=1787806802603-0 / entries-read=130918`,`gateway.submit.results`为`1787806917609-0 / 191696`,`gateway.protocol.logs`为`1787806802967-0 / 40472`;全部保持`pending=0 / lag=0`。本轮没有发送、补发、重投或重新入队短信,也没有修改余额、通道、客户或签名业务资料。
|
||||
- 测试环境真实Chrome回归使用真实API和PostgreSQL数据:运营端13个核心路由、客户端10个核心路由分别在1600×1000、1366×768和390×844检查,共69个页面状态均已登录、非空、无框架错误层及页面级横向溢出;控制台warning/error为0,失败API或静态资源响应为0。外部入口API健康HTTP 200,实际下载CSS`index-CkSy6WDi.css`和JS`index-BLtRK0rD.js`的SHA-256与服务器产物一致;CSS摘要仍为迁移前后的`d7043ee2229a402c6b9284c9153536dd6393446a3b0fe7c47ee7dd05290539c3`。
|
||||
- 两个临时验收账号已精确删除,数据库剩余数为0,并删除其5个Redis会话;本地认证状态文件和测试机临时发布包也已清理。浏览器自动化最初复用仅含运营端会话的状态文件时,客户端正确返回401并跳转登录;修正验收脚本为客户端真实登录后重新执行,最终30个客户端页面及全部网络检查通过,该测试夹具问题不属于平台回归缺陷。预生产环境未访问或修改。
|
||||
|
||||
## 2026-09-05 CSS门禁缺口修复(本地验证与测试发布准备)
|
||||
|
||||
- 用户授权修复、代码提交和测试环境发布,未授权推送或预生产访问。开始核验main/HEAD及origin/main为`64bfb9a`;工作区已有7份规范修改、未跟踪设计开发规范及报备补救方案,均保护不动,测试进度仅提交本轮精确新增段落。
|
||||
- 根因:Stylelint历史兼容使用目录通配符,所有权仅搜索文件名,宽泛选择器识别不完整,AST计数不检查声明值/媒体条件,CI的main推送仅比较最后一个提交。详见`css-modularization-result-20260905.md`新增复核章节,用例`TC-CSS-MOD-007`至`012`。
|
||||
- 新增逐文件所有权和历史AST内容摘要、真实TS/CSS import解析与入口可达性、新文件根className/选择器约束;Stylelint改为精确路径,CI覆盖整次推送及PR merge-base,归档执行完整静态检查。直接声明当前已锁定的PostCSS及selector-parser开发依赖,未升级版本;应用TSX、全部CSS、入口顺序、API、数据库和短信链路均未修改。
|
||||
- 本地验证:门禁15项、前端13套65项、API55套619项通过;前端TypeScript/Vite和API正式构建通过,format/style/css、增量ESLint、结构、安全、部署契约和包体积门禁通过。主CSS仍为`index-CkSy6WDi.css`,SHA-256为`d7043ee2229a402c6b9284c9153536dd6393446a3b0fe7c47ee7dd05290539c3`,入口gzip 107.85KiB。构建保留既有Chart超过500kB及耗时提示;API测试中的异常日志来自测试替身的失败场景,不是线上短信操作。
|
||||
- 2026-09-05测试机SSH实时标记为`64bfb9ad3d6a4e6f57770839172ea50eee984a18`,API/Gateway正常,三条短信Stream均pending=0/lag=0。测试机实际使用系统盘,不套用预生产UUID/迁盘规则;发布恢复点`/opt/cmpp-platform-backups/css-gates-20260905T013053Z-before-64bfb9a`约451MiB,包含PostgreSQL custom dump、完整运行目录、配置、服务/Stream/挂载与资源摘要基线;pg_restore目录、tar可读性及三项SHA均通过。
|
||||
- Browser技能不在当前会话,按前端测试技能使用现有Playwright/Edge。测试环境真实运营端和客户端登录页在1600×1000、1366×768、390×844完成首次进入、刷新、跨入口导航,共6个状态,页面非空、无横向溢出,控制台/页面异常及失败HTTP响应均为0。证据位于本机临时目录`cmpp-css-gates-20260905/browser-smoke.json`及截图。未提交登录、未创建账号,登录后业务交互未重跑,不用登录页或单元测试冒充真实业务验收。
|
||||
- 14个模块仍是历史全局兼容分区,进一步按业务收拢响应式和页面隔离未在本轮实施;静态根类检查不能证明实际DOM/Portal层级。发布采用明确提交归档,候选门禁及资源一致性检查通过后仅更新治理文件和文档,不运行全量初始化/迁移/重启脚本。测试发布结果另行追加。
|
||||
|
||||
Reference in New Issue
Block a user