@agile-team/wl-skills-gate 0.0.0-stage → 0.9.0

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.
Files changed (283) hide show
  1. package/CHANGELOG.md +135 -0
  2. package/LICENSE +18 -0
  3. package/README.md +113 -2
  4. package/assets/brand-tokens.json +45 -0
  5. package/assets/wl-gate-logo-dark.svg +38 -0
  6. package/assets/wl-gate-logo.svg +37 -0
  7. package/assets/wl-mark.svg +11 -0
  8. package/bin/wl-skills-gate.js +297 -0
  9. package/docs/01-quick-start.md +44 -0
  10. package/docs/02-config.md +92 -0
  11. package/docs/03-reports.md +49 -0
  12. package/docs/04-fix-loop.md +51 -0
  13. package/docs/05-adapters.md +53 -0
  14. package/docs/06-gitlab.md +96 -0
  15. package/docs/07-jenkins.md +62 -0
  16. package/docs/08-hooks.md +18 -0
  17. package/docs/09-selftest-coverage.md +36 -0
  18. package/docs/10-enforcement.md +46 -0
  19. package/docs/11-hardening-review.md +50 -0
  20. package/docs/12-closed-loop-review.md +90 -0
  21. package/docs/13-quality-cost-and-isolation.md +112 -0
  22. package/docs/14-low-token-execution.md +110 -0
  23. package/docs/15-java-report-triage.md +50 -0
  24. package/docs/16-project-ci-integration.md +64 -0
  25. package/docs/17-onboarding.md +75 -0
  26. package/docs/18-ci-source.md +42 -0
  27. package/docs/19-nine-dimension-review.md +105 -0
  28. package/docs/README.md +54 -0
  29. package/fixtures/cases/01-clean/expected.json +1 -0
  30. package/fixtures/cases/01-clean/inputs/report.json +6 -0
  31. package/fixtures/cases/01-clean/quality/policy.yml +8 -0
  32. package/fixtures/cases/02-new-error/expected.json +1 -0
  33. package/fixtures/cases/02-new-error/inputs/report.json +6 -0
  34. package/fixtures/cases/02-new-error/quality/policy.yml +8 -0
  35. package/fixtures/cases/03-corrupt-report/expected.json +1 -0
  36. package/fixtures/cases/03-corrupt-report/inputs/report.json +1 -0
  37. package/fixtures/cases/03-corrupt-report/quality/policy.yml +8 -0
  38. package/fixtures/cases/04-missing-file/expected.json +1 -0
  39. package/fixtures/cases/04-missing-file/quality/policy.yml +8 -0
  40. package/fixtures/cases/05-waived/expected.json +1 -0
  41. package/fixtures/cases/05-waived/inputs/report.json +6 -0
  42. package/fixtures/cases/05-waived/quality/policy.yml +8 -0
  43. package/fixtures/cases/05-waived/quality/waivers.yml +8 -0
  44. package/fixtures/cases/06-expired-waiver/expected.json +1 -0
  45. package/fixtures/cases/06-expired-waiver/inputs/report.json +6 -0
  46. package/fixtures/cases/06-expired-waiver/quality/policy.yml +8 -0
  47. package/fixtures/cases/06-expired-waiver/quality/waivers.yml +8 -0
  48. package/fixtures/cases/07-baseline-pass/expected.json +1 -0
  49. package/fixtures/cases/07-baseline-pass/inputs/report.json +6 -0
  50. package/fixtures/cases/07-baseline-pass/quality/baseline.json +13 -0
  51. package/fixtures/cases/07-baseline-pass/quality/policy.yml +8 -0
  52. package/fixtures/cases/08-baseline-new/expected.json +1 -0
  53. package/fixtures/cases/08-baseline-new/inputs/report.json +7 -0
  54. package/fixtures/cases/08-baseline-new/quality/baseline.json +13 -0
  55. package/fixtures/cases/08-baseline-new/quality/policy.yml +8 -0
  56. package/fixtures/cases/09-forged-passed/expected.json +1 -0
  57. package/fixtures/cases/09-forged-passed/inputs/report.json +8 -0
  58. package/fixtures/cases/09-forged-passed/quality/policy.yml +8 -0
  59. package/fixtures/cases/10-malformed-finding/expected.json +1 -0
  60. package/fixtures/cases/10-malformed-finding/inputs/report.json +6 -0
  61. package/fixtures/cases/10-malformed-finding/quality/policy.yml +8 -0
  62. package/fixtures/cases/11-missing-tool/expected.json +1 -0
  63. package/fixtures/cases/11-missing-tool/quality/policy.yml +8 -0
  64. package/fixtures/cases/12-invalid-waiver/expected.json +1 -0
  65. package/fixtures/cases/12-invalid-waiver/inputs/report.json +6 -0
  66. package/fixtures/cases/12-invalid-waiver/quality/policy.yml +8 -0
  67. package/fixtures/cases/12-invalid-waiver/quality/waivers.yml +6 -0
  68. package/fixtures/cases/13-unknown-tool/expected.json +1 -0
  69. package/fixtures/cases/13-unknown-tool/quality/policy.yml +6 -0
  70. package/fixtures/cases/14-duplicate-check-id/expected.json +1 -0
  71. package/fixtures/cases/14-duplicate-check-id/quality/policy.yml +11 -0
  72. package/fixtures/cases/15-missing-project/expected.json +1 -0
  73. package/fixtures/cases/15-missing-project/quality/policy.yml +6 -0
  74. package/fixtures/cases/16-enforce-warnings/expected.json +1 -0
  75. package/fixtures/cases/16-enforce-warnings/inputs/report.json +6 -0
  76. package/fixtures/cases/16-enforce-warnings/quality/policy.yml +9 -0
  77. package/fixtures/cases/17-degraded-required-false/expected.json +1 -0
  78. package/fixtures/cases/17-degraded-required-false/quality/policy.yml +11 -0
  79. package/fixtures/cases/18-duplicate-occurrences/expected.json +1 -0
  80. package/fixtures/cases/18-duplicate-occurrences/inputs/report.json +7 -0
  81. package/fixtures/cases/18-duplicate-occurrences/quality/policy.yml +8 -0
  82. package/fixtures/cases/19-policy-json/expected.json +1 -0
  83. package/fixtures/cases/19-policy-json/inputs/report.json +6 -0
  84. package/fixtures/cases/19-policy-json/quality/policy.json +7 -0
  85. package/fixtures/cases/20-blocker-waiver/expected.json +1 -0
  86. package/fixtures/cases/20-blocker-waiver/inputs/report.json +6 -0
  87. package/fixtures/cases/20-blocker-waiver/quality/policy.yml +8 -0
  88. package/fixtures/cases/20-blocker-waiver/quality/waivers.yml +8 -0
  89. package/fixtures/cases/21-zero-base/expected.json +1 -0
  90. package/fixtures/cases/21-zero-base/inputs/report.json +6 -0
  91. package/fixtures/cases/21-zero-base/quality/policy.yml +8 -0
  92. package/fixtures/cases/22-hash-mismatch/expected.json +1 -0
  93. package/fixtures/cases/22-hash-mismatch/inputs/report.json +6 -0
  94. package/fixtures/cases/22-hash-mismatch/quality/policy.yml +8 -0
  95. package/fixtures/cases/23-release-floor/expected.json +1 -0
  96. package/fixtures/cases/23-release-floor/quality/policy.yml +9 -0
  97. package/fixtures/cases/24-fast-empty/expected.json +1 -0
  98. package/fixtures/cases/24-fast-empty/quality/policy.yml +8 -0
  99. package/fixtures/cases/25-cmd-json/expected.json +1 -0
  100. package/fixtures/cases/25-cmd-json/quality/policy.yml +8 -0
  101. package/fixtures/cases/26-junit/expected.json +1 -0
  102. package/fixtures/cases/26-junit/inputs/junit.xml +7 -0
  103. package/fixtures/cases/26-junit/quality/policy.yml +8 -0
  104. package/fixtures/cases/27-sarif/expected.json +1 -0
  105. package/fixtures/cases/27-sarif/inputs/report.sarif +18 -0
  106. package/fixtures/cases/27-sarif/quality/policy.yml +8 -0
  107. package/fixtures/onboarding/README.md +3 -0
  108. package/fixtures/onboarding/quality-audit-profile.xml +51 -0
  109. package/fixtures/onboarding/quality-unit-profile.xml +101 -0
  110. package/lib/adapters/cmd-json.js +61 -0
  111. package/lib/adapters/eslint.js +69 -0
  112. package/lib/adapters/java-xml.js +147 -0
  113. package/lib/adapters/junit.js +137 -0
  114. package/lib/adapters/raw-json.js +28 -0
  115. package/lib/adapters/sarif.js +57 -0
  116. package/lib/adapters/typecheck.js +37 -0
  117. package/lib/automation.js +247 -0
  118. package/lib/ci-discovery.js +227 -0
  119. package/lib/ci-source.js +203 -0
  120. package/lib/collect.js +87 -0
  121. package/lib/commit-message.js +14 -0
  122. package/lib/config.js +221 -0
  123. package/lib/control-deployment.js +44 -0
  124. package/lib/control-service.js +244 -0
  125. package/lib/control-store.js +120 -0
  126. package/lib/cost.js +102 -0
  127. package/lib/deployment-delivery.js +89 -0
  128. package/lib/deployment-queue.js +101 -0
  129. package/lib/deployment.js +217 -0
  130. package/lib/doctor.js +110 -0
  131. package/lib/evidence.js +208 -0
  132. package/lib/exec.js +69 -0
  133. package/lib/finding-input.js +36 -0
  134. package/lib/fingerprint.js +6 -0
  135. package/lib/fix.js +229 -0
  136. package/lib/gate.js +13 -0
  137. package/lib/governance-notifications.js +45 -0
  138. package/lib/governance.js +521 -0
  139. package/lib/identity.js +49 -0
  140. package/lib/inspect.js +142 -0
  141. package/lib/java-risk-policy.js +44 -0
  142. package/lib/java-source-map.js +36 -0
  143. package/lib/lifecycle-source.js +161 -0
  144. package/lib/native-input.js +60 -0
  145. package/lib/onboard-complete.js +333 -0
  146. package/lib/onboard-config.js +556 -0
  147. package/lib/onboard-environment.js +37 -0
  148. package/lib/onboard-legacy.js +43 -0
  149. package/lib/onboard-lifecycle.js +117 -0
  150. package/lib/onboard-registry.js +93 -0
  151. package/lib/onboard.js +118 -0
  152. package/lib/promote.js +159 -0
  153. package/lib/release-set.js +138 -0
  154. package/lib/report-input.js +38 -0
  155. package/lib/report-producers.js +79 -0
  156. package/lib/report-selection.js +136 -0
  157. package/lib/report.js +153 -0
  158. package/lib/review-additions.js +159 -0
  159. package/lib/review-auto.js +75 -0
  160. package/lib/review-ci.js +119 -0
  161. package/lib/review-collect.js +146 -0
  162. package/lib/review-facts.js +160 -0
  163. package/lib/review-live.js +30 -0
  164. package/lib/review-publication.js +85 -0
  165. package/lib/review-publish.js +191 -0
  166. package/lib/review.js +376 -0
  167. package/lib/risk.js +15 -0
  168. package/lib/run.js +432 -0
  169. package/lib/source-state.js +100 -0
  170. package/lib/util.js +36 -0
  171. package/lib/validate-report.js +72 -0
  172. package/lib/verify-artifact.js +24 -0
  173. package/lib/xml.js +77 -0
  174. package/lib/yaml-lite.js +126 -0
  175. package/package.json +50 -4
  176. package/schemas/quality-summary.schema.json +292 -0
  177. package/scripts/lib-tests/automation.test.mjs +126 -0
  178. package/scripts/lib-tests/ci-discovery.test.mjs +123 -0
  179. package/scripts/lib-tests/ci-source.test.mjs +153 -0
  180. package/scripts/lib-tests/closure-regressions.test.mjs +188 -0
  181. package/scripts/lib-tests/collect.test.mjs +81 -0
  182. package/scripts/lib-tests/config.test.mjs +103 -0
  183. package/scripts/lib-tests/control-review.test.mjs +110 -0
  184. package/scripts/lib-tests/control-service.test.mjs +88 -0
  185. package/scripts/lib-tests/control-store.test.mjs +77 -0
  186. package/scripts/lib-tests/cost.test.mjs +94 -0
  187. package/scripts/lib-tests/deployment-http.test.mjs +66 -0
  188. package/scripts/lib-tests/deployment.test.mjs +250 -0
  189. package/scripts/lib-tests/doctor.test.mjs +106 -0
  190. package/scripts/lib-tests/fingerprint.test.mjs +30 -0
  191. package/scripts/lib-tests/fix-state.test.mjs +55 -0
  192. package/scripts/lib-tests/governance-lifecycle.test.mjs +131 -0
  193. package/scripts/lib-tests/governance.test.mjs +240 -0
  194. package/scripts/lib-tests/hardening.test.mjs +390 -0
  195. package/scripts/lib-tests/inspect.test.mjs +152 -0
  196. package/scripts/lib-tests/java-triage.test.mjs +149 -0
  197. package/scripts/lib-tests/java-unit-wrapper.test.mjs +107 -0
  198. package/scripts/lib-tests/junit-evidence.test.mjs +214 -0
  199. package/scripts/lib-tests/lifecycle-source.test.mjs +135 -0
  200. package/scripts/lib-tests/onboard-complete.test.mjs +324 -0
  201. package/scripts/lib-tests/onboard-registry.test.mjs +51 -0
  202. package/scripts/lib-tests/onboard-review-facts.test.mjs +89 -0
  203. package/scripts/lib-tests/onboard.test.mjs +180 -0
  204. package/scripts/lib-tests/report-producers.test.mjs +90 -0
  205. package/scripts/lib-tests/review-additions.test.mjs +98 -0
  206. package/scripts/lib-tests/review-auto.test.mjs +94 -0
  207. package/scripts/lib-tests/review-ci.test.mjs +72 -0
  208. package/scripts/lib-tests/review-collect.test.mjs +61 -0
  209. package/scripts/lib-tests/review-facts.test.mjs +44 -0
  210. package/scripts/lib-tests/review-publication.test.mjs +47 -0
  211. package/scripts/lib-tests/review-publish.test.mjs +89 -0
  212. package/scripts/lib-tests/review.test.mjs +212 -0
  213. package/scripts/lib-tests/shared-adapters.test.mjs +157 -0
  214. package/scripts/lib-tests/validate-report.test.mjs +37 -0
  215. package/scripts/lib-tests/yaml-lite.test.mjs +55 -0
  216. package/scripts/run-fixtures.mjs +156 -0
  217. package/scripts/run-integration.mjs +198 -0
  218. package/scripts/test-support/control-review-fixture.mjs +57 -0
  219. package/scripts/test-support/review-collect-fixture.mjs +47 -0
  220. package/templates/ci/Jenkinsfile +58 -0
  221. package/templates/ci/Jenkinsfile.attest +32 -0
  222. package/templates/ci/Jenkinsfile.automation +20 -0
  223. package/templates/ci/Jenkinsfile.deployment +78 -0
  224. package/templates/ci/Jenkinsfile.release-sign +26 -0
  225. package/templates/ci/Jenkinsfile.review-sign +30 -0
  226. package/templates/ci/central-review.sh +10 -0
  227. package/templates/ci/controlled-deployment-http.mjs +72 -0
  228. package/templates/ci/create-deployment-facts.mjs +7 -0
  229. package/templates/ci/deployment-http.json +14 -0
  230. package/templates/ci/gitlab-backend.yml +40 -0
  231. package/templates/ci/gitlab-frontend.yml +32 -0
  232. package/templates/ci/produce-review-facts.mjs +15 -0
  233. package/templates/ci/publish-reviews.mjs +5 -0
  234. package/templates/ci/sign-collected-release.mjs +7 -0
  235. package/templates/ci/wl-quality-automation.service +18 -0
  236. package/templates/ci/wl-quality-control.service +18 -0
  237. package/templates/hooks/commit-msg +11 -0
  238. package/templates/hooks/pre-commit +15 -0
  239. package/templates/hooks/pre-push +10 -0
  240. package/templates/onboarding/automation/ide-tasks.json +31 -0
  241. package/templates/onboarding/automation/project-actions.mjs +266 -0
  242. package/templates/onboarding/backend/java-unit.mjs +84 -0
  243. package/templates/onboarding/backend/java-unit.plan.json +15 -0
  244. package/templates/onboarding/backend/policy.yml +63 -0
  245. package/templates/onboarding/backend/quality-tools.package.json +9 -0
  246. package/templates/onboarding/backend/run.mjs +10 -0
  247. package/templates/onboarding/frontend/policy.yml +40 -0
  248. package/templates/onboarding/legacy/backend-commit-msg.sh +21 -0
  249. package/templates/onboarding/legacy/frontend-common-core-postinstall.mjs +52 -0
  250. package/templates/onboarding/legacy/frontend-enforce-pnpm.mjs +9 -0
  251. package/templates/onboarding/legacy/frontend-pre-commit.sh +15 -0
  252. package/templates/onboarding/legacy/frontend-pre-push.sh +16 -0
  253. package/templates/platform/README.md +33 -0
  254. package/templates/platform/action.example.json +15 -0
  255. package/templates/platform/automation-config.json +66 -0
  256. package/templates/platform/ci-source.backend.json +40 -0
  257. package/templates/platform/ci-source.frontend.json +42 -0
  258. package/templates/platform/ci-source.gitlab.json +18 -0
  259. package/templates/platform/ci-source.jenkins.json +31 -0
  260. package/templates/platform/control-config.json +48 -0
  261. package/templates/platform/deployment-config.json +92 -0
  262. package/templates/platform/event.example.json +17 -0
  263. package/templates/platform/expectations.example.json +16 -0
  264. package/templates/platform/governance-config.json +106 -0
  265. package/templates/platform/lifecycle-event.example.json +29 -0
  266. package/templates/platform/review-ci.backend.json +6 -0
  267. package/templates/platform/review-ci.frontend.json +6 -0
  268. package/templates/platform/review-collector.backend.json +59 -0
  269. package/templates/platform/review-collector.frontend.json +67 -0
  270. package/templates/platform/review-policy.backend.json +72 -0
  271. package/templates/platform/review-policy.frontend.json +71 -0
  272. package/templates/platform/review-publish-config.json +45 -0
  273. package/templates/quality/generated.gitignore +7 -0
  274. package/templates/quality/java-static-checks.yml +31 -0
  275. package/templates/quality/java-unit.plan.json +13 -0
  276. package/templates/quality/policy.yml +20 -0
  277. package/templates/quality/review-evidence.plan.json +11 -0
  278. package/templates/quality/review-input.example.json +25 -0
  279. package/templates/quality/review-policy.json +15 -0
  280. package/templates/quality/rules.lock.json +9 -0
  281. package/templates/quality/waivers.yml +8 -0
  282. package/templates/scripts-quality/java-unit.mjs +83 -0
  283. package/templates/scripts-quality/run.mjs +13 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,135 @@
1
+ # 0.9.0 — 2026-10-15
2
+
3
+ - 修复接入环境与依赖准备、候选Review上下文和索引、删除/暂存区修复恢复、真实阻断与必要环境关闭、消息隔离。
4
+ - 补齐真实CI发现与可恢复调度、九维原件采集/补证/认证确认、授权前CI重新核验、OIDC处理页与投递恢复。
5
+ - 补齐独立签发、前后端组合与API/数据库/顺序约束、单次部署授权、实际冒烟和显式故障恢复。
6
+ - 重整README为接入、运行流程与文档入口,提供可复用的WL系列字标及Gate品牌资产。
7
+ - 本地源码和独立tgz分别验收;业务仓库、远端权限/群/SSO与真实业务必测仍以现场回执确认。
8
+
9
+ # 0.8.0 — 2026-10-15(本地交付候选,未发布)
10
+
11
+ - Gate 收入版本化前后端接入资产和 onboard,识别实际项目、显示完整差异并绑定确认;quality-tools 明确为后端私有 Node 依赖目录。
12
+ - 九维 Review 草稿、同口径修前修后对比、原始证据重算和逐维独立授权;正式签发及晋级强制要求 v2 记录,旧的仅身份/SHA批准不再放行。
13
+ - 固定 GitLab/Jenkins API 只读采集、真实 SHA/ref/全部必需作业与精确工件校验;拒绝 WebHook 自报成功、allow_failure、缺项、取消/跳过旧报告和采集中漂移。
14
+ - 飞书分类卡片、Review/构建/部署独立事实流共用签名台账与待发箱;构建成功、投递成功不会关闭质量问题。
15
+ - 文档明确包内实现、项目实接、远端权限/身份/存储与业务复验的验收责任;本地候选不代表 registry 发布或生产已接通。
16
+
17
+ # 0.7.0 — 2026-10-13(源码修订,未发布)
18
+
19
+ - JUnit 多模块明确 files/reportDirs/requiredSuites,报告全集、必测计数、生产一次和终轮摘要验证;拒绝旧 XML、源码覆盖、解析损坏与后续篡改。
20
+ - doctor 只读预检项目接线,Java 单测包装器明确模块/报告全集与依赖准备,补充前后端 GitLab 和 Jenkins 接线片段。
21
+ - governance 最小中央签名事件台账、独立复核关闭、漏跑对账、自然分钟 SLA、消息摘要/认证跳转、飞书签名与企业微信投递;默认预览。并发租约、未知投递和死信显式失败。
22
+ - 台账固定配置/公钥身份,动作和通知绑定当前 revision;拒绝过期卡片、输出路径别名与损坏台账。平台 API/SSO 查询、真实接线、服务和群投递仍须操作手册实测。
23
+ - 同步 V3 三份文档职责与精选 code-scan-kit 规则已正式集成的定位;无需 AI API。
24
+
25
+ # 0.6.1 — 2026-10-12
26
+
27
+ - npm 发布访问策略改为 public;公开获取与使用授权分开,保留 UNLICENSED,不授予开源许可。
28
+ - 新增独立 LICENSE:权利人为 AGILE TEAM,未经事先书面授权不得使用、复制、修改或再分发;授权申请通过仓库 Issues,不伪造或推定授权记录。
29
+ - LICENSE 明确纳入 npm 包;README、当前手册与模板版本锁同步 0.6.1。保留 0.6.0 历史记录和标签,不修改业务解析、风险分级或门禁裁决代码。
30
+
31
+ # 0.6.0 — 2026-10-12
32
+
33
+ - 汇总 0.5.2 源码修订:共享工程包报告转换、Java XML 本轮一次生产、只读分页 inspect 与离线 cost;保留原 CLI/模块能力和平台权限边界。
34
+ - Java 报告补齐 P3C/原引擎身份、原生优先级与成员签名;成员指纹防止同一行、同一说明的不同字段被合并。
35
+ - Gate 单源风险表新增三项安全/正确性底线;locale 显式预警和 SpotBugs 四类上下文复核保留发现,不自动排除整类。
36
+ - 严格 sourceRoots 支持多模块 main/test 实际文件定位;缺文件、歧义、符号链接和越界失败关闭。报告单独保留 parser 版本,未知外部工具版本不虚报验证。
37
+ - 自测使用包内实际版本生成临时 rules.lock,避免发布升版后夹具仍锁旧版本。更新安装/迁移/版本冻结文档,去除 standalone npm 包中的工作区兄弟路径链接。
38
+ - 发布准备保留现有 restricted/UNLICENSED 设置;包级与实际 tgz 自测可证明本地能力,不替代 registry、Git、平台权限与生产接线回执。
39
+
40
+ # 0.5.2 — 2026-10-11~12(源码修订,未发布)
41
+
42
+ - cmd-json 集中转换 Kit/UI/BD 原生完整 JSON,校验执行与覆盖证据、保留等级与质量底线;项目不再各自维护同类转换。
43
+ - captureStdout 以文件描述符接收大报告,防止生产者立即退出导致管道 JSON 截断;仍拒绝旧文件、超限及无证据的非零退出。
44
+ - java-xml 解析 Checkstyle/PMD/SpotBugs 原 XML,区分确定缺陷和治理提示;分析异常、依赖缺类、缺报告及生产失败返回 invalid。
45
+ - Java XML 补齐显式 format=p3c、producer/原引擎版本/原生优先级类别rank/主类和方法字段签名;稳定成员context避免同一generic说明合并不同字段。本地parser版本单独归档,不假装外部工具已核验。
46
+ - Gate 单源 Java 风险表保留原四底线,增加 HardCodedCryptoKey/InsecureCryptoIv/BrokenNullCheck 不可基线error;locale显式预警,SpotBugs四类表征/构造风险保留context-review warning及理由,不自动识别@Service并豁免整类。
47
+ - 新增严格java-xml sourceRoots,按明确多模块main/test源目录探测真实文件;不存在、同名歧义、符号链接和越界失败关闭。旧合成parser夹具补真实源码文件,未降低运行时校验。
48
+ - 同步当前接入文档:三档成本、Java 静态/单元/集成隔离、历史治理与预警;既有业务项目接入未自动升级,平台通知仍待验收。
49
+ - Java XML 新增显式 producer 本轮一次生产:清除同组全部旧文件、完整报告检查与消费前哈希核验;下一轮重新生产,失败/缺报告不重试伪装成功。
50
+ - 新增离线 cost:工件去重、项目/档位和检查分位耗时、生产次数及候选重复;可导入来源标明的宿主 usage,缺失不填零,缓存输入不重复计数。
51
+ - 阻止 displayOnly、裁剪和未完成分页结果回流为门禁输入。
52
+ - 增加只读 inspect:默认摘要、规则/等级/状态过滤、UTF-8 字节预算与绑定报告/筛选的分页游标;翻页只读工件,不重复扫描,过滤不改变原结论和全量计数。
53
+ - 明确确定性脚本、AI 上下文与 Runner 成本分别统计;完整报告留存、按需读取,重复检查/告警由共享接线收敛,不削减 release 必测。增加 7 项视图预算、分页、防漂移、只读与 CLI 回归验证。
54
+
55
+ # 0.5.1 — 2026-10-09
56
+
57
+ - ESLint 全量显式 targets/args;保存实际覆盖清单,拒绝空扫描、全忽略与增量漏文件,兼容中文/空格及物理路径别名;检查参数禁止修复模式。
58
+ - release 参数及证明核验均要求全量;已跟踪源码不因生成目录/报告排除而消失,报告目录防覆盖,路径与特殊文件失败关闭。
59
+ - 保留适配器执行失败的原诊断;受控检查提前要求基线/豁免批准摘要,promote 全链传递;依赖准备留脱敏诊断。
60
+ - 晋级以明确旧 HEAD 的 lease 拒绝最后时刻目标并发;仍核验候选父提交并只推进批准的快进。
61
+ - 修复符号链接/HEAD 漂移失败关闭;安全恢复后重新扫描并清空尝试 fixed 结果,不完整恢复要求人工处理。
62
+ - 93 单元 + 29 fixture + 17 集成通过;文档细化覆盖、漏跑、乱序/复发、恢复授权和修复发布准入。未发布 npm,真实平台接线仍待验收。
63
+
64
+ # 0.5.0 — 2026-10-08
65
+
66
+ - 将 unsigned 检查结果与独立 Ed25519 签发分离;强制核验项目、真实 SHA、档位、环境、批准摘要、公钥、签发身份、作业和时效。
67
+ - 新增 manifest,发布证明绑定真实制品/配置摘要;部署验证读取实际字节。
68
+ - promote 只生成候选和 bundle;promote-apply 以新 bare 仓库核验签名、非作者 Review、父提交与最新远端 HEAD 后更新。禁用旧 --push/--allow-any,失败也归档。
69
+ - 质量底线不可基线/豁免;合并取最高风险,基线风险/发生数增长重新阻断,增量不标历史问题消失,拒绝自批例外。
70
+ - JUnit 核验完整 XML、实际计数和必测,跳过/零用例阻断;清旧报告、修正非零退出契约,暂存/工作区不一致拒绝。
71
+ - 修复计划 v2 绑定文件/报告/策略/HEAD,忽略报告任意命令,白名单外变更/命令失败/回归回滚,扫描通过仅进入待复验。
72
+ - 新增 Code Quality 导出、共用 commit-message 验证;docs 随包发布,自测在临时目录执行,清理 fixture 生成报告。
73
+ - 同步真实权限边界和 0.4 迁移说明;D1~D4 明确首期,平台查询、通知和双仓组合仍保留待接入。
74
+
75
+ # Changelog
76
+
77
+ ## 0.4.0(2026-10-08)
78
+
79
+ 代码/逻辑/验证/报告四层全面闭环(平台接线与自动扫描脚本除外):
80
+ - 新适配器:`cmd-json`(任意命令输出统一 findings,工程包/扫描器通用入口)、`junit`(失败/错误=error、跳过=warning、零用例=error,正文 3.5/5.6)、`sarif`(SARIF v2.x 映射);共用 finding-input 解析,无胶水重复。
81
+ - eslint:`--base/--head` 增量(git diff 范围过滤)、`cache: true` 缓存参数;`command` 覆盖与 staged/增量范围同时出现直接 invalid。
82
+ - `verify-artifact` 子命令(正文 13.3 C3):证明结论/SHA/受控哈希/reportDigest 防篡改/eventId 关联/时效/报告内阻断问题复核,任一不符 exit 2。
83
+ - `promote` 子命令(正文 5.2/13.2 B4 引擎件):流向校验(dev-工号-模组→dev、相邻顺序晋级,跨级须 --allow-any 留痕)、临时 worktree 候选合并、候选上重跑门禁、目标 HEAD 并发复核、受控 push(非 force)、promotion-record 与候选证据归档。
84
+ - 报告新增自包含 `quality-report.html`(与 Markdown 同口径)。
85
+ - 验证闭环:新增 5 组 lib 单元测试(node:test);`fix --apply` 集成用例(修复→复扫→closed→beforeArchive/changedFiles);本地 bare 仓库集成测试 4 场景(晋级推进/违规拦截/流向拒绝/证据核对);新适配器 fixture 25~27;self-test 全量 29 项。
86
+ - 修复:run.js 适配器注册表补齐三个新工具(缺失时误报 invalid)。
87
+
88
+ ## 0.3.1(2026-10-07)
89
+
90
+ 二次深挖闭环(回归缺陷 + 零消费者断点):
91
+ - **修复 0.3.0 引入的回归**:模板 policy 移出 fast 档类型检查后 fast 变空 → pre-commit 必挂。模板/示例将 FE-ESLINT 恢复进 fast(配合 `--scope staged` 只查暂存区);新增 fixture 24-fast-empty 固化"空档位即 invalid"语义(已实测复现回归并验证修复)。
92
+ - **schema 从摆设变契约**:新增 `validate-report` 子命令按 schema 校验报告结构;self-test driver 对每个 case 的 summary 执行 schema 校验,报告与 schema 漂移从此有回归(实测通过/篡改两路径)。
93
+ - attestation 补 `eventId`(成功与 failFast 两路径),证明与报告可关联。
94
+ - hooks 模板:缺少 `scripts/quality/run.mjs` 薄入口时给出复制指引并 exit 2(原为晦涩的 cannot open)。
95
+ - `--scope` 白名单校验(仅 staged),任意值不再静默无效。
96
+ - `enforceWarnings` 布尔强转,json 变体传字符串 "false" 不再被当 true。
97
+ - self-test 25 项全绿。
98
+
99
+ ## 0.3.0(2026-10-07)
100
+
101
+ 对照落地执行文档逐章核对后的冲突修复(A/B/C/D 四类 14 项,均附 fixture 或实证):
102
+ - blocker 豁免默认拒绝(`blockerWaivers: reject`,正文 3.4):命中有效豁免仍阻断并标记 `waiverRejected`(fixture 20)。
103
+ - `required: false` 必须登记 `naReason`(可选 `alternative`),缺失即 policy invalid(正文 3.6,fixture 17 强化)。
104
+ - 模板 policy:类型检查移出 fast 档(10s 预算,附录 B.2 #3);新增 `commitTypes`、`releaseRequires`、`blockerWaivers` 键。
105
+ - 全零 `--base` SHA 拒绝(正文 13.2,fixture 21)。
106
+ - commit-msg 钩子类型白名单改读 policy `commitTypes`,缺省回落内置表(收敛"第四套白名单"口径分裂,已实测 wip/feat 两路径)。
107
+ - 新增 `--expect-policy-hash` / `--expect-rules-hash` 运行期摘要校验,不符即 invalid;docs/10 声明的"版本锁第三处咬合"落地(fixture 22 + 实测匹配/不匹配两路径)。
108
+ - release 档最低检查集 `releaseRequires`,缺任一即 invalid(正文 3.1"不能关闭的条件",fixture 23 + 满足路径实测)。
109
+ - attestation 字段改名 `compareBaseSha/compareHeadSha`(消除与晋级语义的混淆),新增 expected/match 字段。
110
+ - baseline 元数据(`generatedAt/ruleSetVersion/fileDigest`)进报告(正文 3.3)。
111
+ - fix-report 新增 `changedFiles`(git status,排除门禁产物目录;已实测);快照/自动回滚登记层级Ⅱ。
112
+ - summary 新增 `run.eventId`(正文 7.2 幂等入库键);finding 新增可选 `suggestion`(正文 4.2 修复建议,已实测进 markdown)。
113
+ - 信任边界写入 docs/06/10:策略作者可执行任意命令,Runner 不得持特权凭据(正文 12.6)。
114
+ - self-test 24 项全绿;driver 支持 per-case `profile/args`。
115
+
116
+ ## 0.2.0(2026-10-07)
117
+
118
+ 自审修复(缺陷均有实证复现):
119
+ - 指纹合并不再吞位置:同指纹多处命中保留 `occurrences` 行号清单,报告展示"行 10/20,共 2 处";eslint 指纹改由 规则+文件+消息 决定。
120
+ - yaml-lite:重复键直接报错(防配置静默漂移);未加引号值支持行内 `#` 注释截断,`src/#x.vue` 类值不受影响。
121
+ - 豁免记录按索引判定有效性,同 id(或同缺 id)记录不再连坐。
122
+ - eslint 适配器:配置 `command` 覆盖时禁止 `--scope staged`(语义不明确即 invalid)。
123
+ - fix --apply:复扫前把修复前 summary 归档为 `repair/summary-before-<planId>.json`;fix-report 新增 `failedCommands`。
124
+ - 薄入口模板:包未安装时给出安装指引并 exit 2(原为原始 MODULE_NOT_FOUND、exit 1)。
125
+ - self-test driver:FAIL 输出 stderr 尾部;支持 `occurrencesAtLeast` 断言;新增 fixture 13~19(未知工具/重复检查 id/缺 project/enforceWarnings/required=false 降级/多处命中/JSON 配置变体),共 20 项;fixture 产物加入 .gitignore。
126
+
127
+ ## 0.1.0(2026-10-07)
128
+
129
+ - 首个骨架版本:run/collect/gate/fix 统一入口,三档 profile,统一退出码 0/1/2。
130
+ - 失败关闭:配置缺失、工具缺失、报告损坏/缺失/结构错误、finding 缺字段、超时均判 invalid。
131
+ - 稳定指纹(项目+规则+文件+结构特征)、有期限豁免、存量基线、到期回退、基线待复验移除。
132
+ - 伪造结论防护:输入结果的 decision/status/passed 字段一律忽略,按 findings 重算。
133
+ - 统一报告:quality-summary.json(schemaVersion=1 最小集)、quality-report.md、gate-attestation.json。
134
+ - 13 个 fixture 自测(self-test)覆盖通过/阻断/invalid/豁免/基线/伪造/修复计划。
135
+ - 模板:quality/ 配置、scripts/quality/run.mjs 薄入口、hooks(pre-commit/commit-msg/pre-push,含耗时打点)。
package/LICENSE ADDED
@@ -0,0 +1,18 @@
1
+ 授权声明 / Authorization Notice
2
+
3
+ Copyright (c) 2026 AGILE TEAM. All rights reserved.
4
+ 权利人:AGILE TEAM。保留所有权利。
5
+
6
+ 本软件及其随附的源码、文档、模板和其他资料采用 UNLICENSED 授权状态。
7
+ 未经权利人 AGILE TEAM 事先书面授权,不得使用、复制、修改或再分发本软件及其随附资料。
8
+ 公开仓库、公开 npm 包或其他公开获取渠道不授予使用、复制、修改或再分发授权。
9
+ 取得书面授权后,仅可在该书面授权明确约定的范围内使用;公开获取不构成授权记录。
10
+
11
+ 如需申请授权,请通过仓库 Issues 联系权利人:
12
+ https://github.com/ChenyCHENYU/wl-skills-gate/issues
13
+
14
+ This software and its accompanying source code, documentation, templates and other materials are UNLICENSED.
15
+ Prior written authorization from the rights holder, AGILE TEAM, is required to use, copy, modify or redistribute them.
16
+ Availability through a public repository, public npm package or any other public channel does not grant such authorization.
17
+ Any authorized use is limited to the scope expressly stated in that prior written authorization.
18
+ To request authorization, contact the rights holder through the repository Issues linked above.
package/README.md CHANGED
@@ -1,3 +1,114 @@
1
- # Temporary Holding Version
1
+ <p align="center">
2
+ <picture>
3
+ <source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ChenyCHENYU/wl-skills-gate/v0.9.0/assets/wl-gate-logo-dark.svg" />
4
+ <img src="https://raw.githubusercontent.com/ChenyCHENYU/wl-skills-gate/v0.9.0/assets/wl-gate-logo.svg" width="920" alt="WL Gate — Automated quality workflow" />
5
+ </picture>
6
+ </p>
2
7
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
8
+ <p align="center">
9
+ <strong>从提交检查到复验关闭的质量工程执行包</strong><br />
10
+ 自动接入 · 脚本修复与复扫 · 九维 Review · 构建发布门禁
11
+ </p>
12
+
13
+ <p align="center">
14
+ <a href="https://www.npmjs.com/package/@agile-team/wl-skills-gate"><img src="https://img.shields.io/npm/v/@agile-team/wl-skills-gate?color=0D9488&label=npm" alt="npm version" /></a>
15
+ <img src="https://img.shields.io/badge/Node.js-%E2%89%A522.12-172B43" alt="Node.js 22.12 or later" />
16
+ <img src="https://img.shields.io/badge/runtime_dependencies-0-0D9488" alt="Zero runtime dependencies" />
17
+ <a href="./LICENSE"><img src="https://img.shields.io/badge/license-authorization_required-64748B" alt="Authorization required" /></a>
18
+ </p>
19
+
20
+ <p align="center">
21
+ <a href="#三步接入"><strong>快速接入</strong></a> ·
22
+ <a href="#接入后怎么运行">运行流程</a> ·
23
+ <a href="#wl-系列怎么配合">包与目录</a> ·
24
+ <a href="./templates/ci">CI 模板</a> ·
25
+ <a href="./docs/README.md">完整文档</a> ·
26
+ <a href="./CHANGELOG.md">更新记录</a>
27
+ </p>
28
+
29
+ ---
30
+
31
+ ## Gate 做什么
32
+
33
+ Gate 把项目检查器、Git Hook、CI、Review 与处置记录接成同一条流程。开发者正常提交代码即可触发检查,技术经理和运维统一维护规则、必测、权限与通知。
34
+
35
+ | 需要解决的事 | Gate 的处理方式 |
36
+ | --- | --- |
37
+ | 问题到构建时才暴露 | 提交、推送阶段自动检查;CI 再做完整核验 |
38
+ | 修复依赖反复问 AI | 先展示问题和修复计划,确认后执行批准脚本,自动复扫 |
39
+ | Review 只有一张扫描结果 | 汇总九维证据、代码差异和修前修后变化,由非作者逐维确认 |
40
+ | 构建成功就被当作闭环 | 分别记录检查、Review、构建、部署和复验;满足关闭条件才结项 |
41
+
42
+ **九维范围:** 提交 · 分支 · 编码 · UI 与交互 · Code Review · 测试 · 扫描门禁 · CI/CD · 工程治理。
43
+
44
+ ## 三步接入
45
+
46
+ 准备 **Node.js ≥22.12**,并使用项目固定的包管理器、检查器及 Java 工具链。以下命令由接入维护者执行一次;安装源可替换为团队批准的镜像。
47
+
48
+ **1. 预览。** 在实际 Git 项目上识别技术栈,查看文件差异、固定依赖、Hook、检查范围和阻断项。
49
+
50
+ ```bash
51
+ npx --yes @agile-team/wl-skills-gate@0.9.0 onboard \
52
+ --root /path/to/project --complete --registry https://registry.npmjs.org
53
+ ```
54
+
55
+ **2. 确认执行。** 审核预览后,使用本次返回的 `planHash` 应用同一计划。
56
+
57
+ ```bash
58
+ npx --yes @agile-team/wl-skills-gate@0.9.0 onboard \
59
+ --root /path/to/project --complete --registry https://registry.npmjs.org \
60
+ --apply --plan-hash "<本次 planHash>" --confirm
61
+ ```
62
+
63
+ 接入任务按计划安装依赖、同步适用规则、配置 Hook,并验证真实检查和报告。失败保留阶段回执,修正后续跑。
64
+
65
+ **3. 验证效果。** 查看首份报告及 Hook 正反例,再接入下表的 CI 与中央服务。日常提交、推送自动检查,开发者不用输入扫描命令。
66
+
67
+ | 项目 | 工具装在哪里 | 业务构建 |
68
+ | --- | --- | --- |
69
+ | PC Vue 前端,如 `wl-ui-produce` | 现有 `package.json` / `node_modules` | 沿用原前端构建 |
70
+ | Java/Maven 后端,如 `wl-produce` | 独立的 `quality-tools/` 目录 | 沿用 Maven,Node 工具不进入 jar |
71
+
72
+ 内置后端配套针对 `wl-produce` PL 模块;其他 Maven 项目先批准自己的模块与必测配套。移动端、UniApp 不套用 PC 配套。完整步骤见 [项目接入](./docs/17-onboarding.md)。
73
+
74
+ ## 接入后怎么运行
75
+
76
+ | 环节 | 自动执行 | 人员操作与结果 |
77
+ | --- | --- | --- |
78
+ | 提交 / 推送 | Hook 执行快速或标准检查,生成报告 | 有阻断先处理,保留项目已有提交约定 |
79
+ | 修复 / 复扫 | 按批准计划执行脚本,核对变更范围并复扫 | 确认后修复;查看新问题、剩余项与真实差异 |
80
+ | 九维 Review | 收集 Git、CI、测试及责任证据,生成待确认记录 | 非作者补充实际 UI / 影响 / 外部测试材料,再逐维确认 |
81
+ | 合并 / 发布 | 核验候选 SHA、正式 Review、制品、环境和发布组合 | 合并、部署和恢复分别授权;冒烟由独立验证人确认 |
82
+ | 通知 / 关闭 | 分类推送,漏跑与超时对账,失败重试并留证 | 主备认领,按必要环境复验后关闭;复发重新打开 |
83
+
84
+ **项目接入与远端接线分别验收。** 运维配置受保护分支、必需作业、固定 Runner 和独立凭据;中央服务连接真实 CI、SSO、证据存储与飞书群。可直接使用包内 [CI 模板](./templates/ci) 和 [中央配置](./templates/platform/README.md)。
85
+
86
+ 检查退出码:`0` 通过、`1` 阻断、`2` 执行或证据无效。扫描通过、消息送达和人工补证都不会自动清除必需测试失败或批准发布。
87
+
88
+ ## wl 系列怎么配合
89
+
90
+ | 名称 | 职责 |
91
+ | --- | --- |
92
+ | **Gate** | 统一接入、执行检查、裁决、修复复扫、证据与处置流程 |
93
+ | **Kit** | PC Vue 管理端编码与工程约定 |
94
+ | **UI** | PC 管理端 UI、样式与交互检查 |
95
+ | **BD** | Java 后端规范、规则资产及检查能力 |
96
+ | `quality-tools/` | Java 仓库的 Node 工具目录,里面安装 Gate / BD;不是另一个包 |
97
+
98
+ Gate 复用项目已有 ESLint、类型检查、Maven、JUnit 及适用规则包,统一报告与裁决。检查、修复、归档和通知由脚本执行,Gate 不调用大模型 API。按需查看报告可用 [`inspect`](./docs/14-low-token-execution.md),无需重复扫描。
99
+
100
+ ## 文档入口
101
+
102
+ | 要做什么 | 从这里开始 |
103
+ | --- | --- |
104
+ | 项目接入、Hook 与首扫 | [接入指南](./docs/17-onboarding.md) · [项目与运维集成](./docs/16-project-ci-integration.md) |
105
+ | 配置检查器、范围与等级 | [配置](./docs/02-config.md) · [适配器](./docs/05-adapters.md) · [Java 报告](./docs/15-java-report-triage.md) |
106
+ | CI、SSO、飞书与处置 | [可信 CI 来源](./docs/18-ci-source.md) · [中央接线](./templates/platform/README.md) |
107
+ | 九维证据与正式 Review | [Review 契约](./docs/19-nine-dimension-review.md) |
108
+ | 验证、升级与排障 | [完整索引](./docs/README.md) · [自测与环境验收](./docs/09-selftest-coverage.md) · [更新记录](./CHANGELOG.md) |
109
+
110
+ ## 开发与授权
111
+
112
+ 仓库验证使用 `npm test`,包含单元、规则场景及本地 Git / 签名 / 制品集成测试。发布前对固定 tgz 独立安装并复验。
113
+
114
+ [WL 系列标识](./assets/wl-mark.svg)与[品牌配色](./assets/brand-tokens.json)随包交付,后续 wl 包可复用同一字标并区分模块色。使用授权见 [LICENSE](./LICENSE);npm 公开可下载不等于开源授权,授权申请通过[仓库 Issues](https://github.com/ChenyCHENYU/wl-skills-gate/issues)。
@@ -0,0 +1,45 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "series": "WL Engineering",
4
+ "product": "WL Gate",
5
+ "tagline": "Automated quality workflow",
6
+ "mark": {
7
+ "file": "wl-mark.svg",
8
+ "viewBox": "0 0 128 128",
9
+ "color": "currentColor",
10
+ "minimumSizePx": 32,
11
+ "clearSpaceViewBoxUnits": 16,
12
+ "construction": "Geometric W and L, open gate frame, check node. Keep the same paths across the WL series."
13
+ },
14
+ "banner": {
15
+ "viewBox": "0 0 920 220",
16
+ "light": "wl-gate-logo.svg",
17
+ "dark": "wl-gate-logo-dark.svg",
18
+ "cornerRadius": 28
19
+ },
20
+ "palette": {
21
+ "navy": "#102E46",
22
+ "navyDeep": "#0B2034",
23
+ "navySurface": "#173B59",
24
+ "mint": "#49D9BA",
25
+ "mintAccessibleOnLight": "#159D82",
26
+ "paper": "#F7FAFC",
27
+ "mist": "#EEF6F8",
28
+ "textLight": "#F2F8FC",
29
+ "textMutedLight": "#537083",
30
+ "textMutedDark": "#9EBDC9"
31
+ },
32
+ "typography": {
33
+ "family": "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, sans-serif",
34
+ "productSize": 66,
35
+ "productWeight": 750,
36
+ "seriesSize": 14,
37
+ "seriesTracking": 3.8,
38
+ "taglineSize": 20
39
+ },
40
+ "extension": {
41
+ "shared": ["WL monogram paths", "banner geometry", "typographic hierarchy", "navy base"],
42
+ "perProduct": ["product name", "tagline", "accent color"],
43
+ "examples": ["WL Kit", "WL UI", "WL BD"]
44
+ }
45
+ }
@@ -0,0 +1,38 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 220" role="img" aria-labelledby="wl-gate-dark-title wl-gate-dark-desc">
2
+ <title id="wl-gate-dark-title">WL Gate — WL Engineering</title>
3
+ <desc id="wl-gate-dark-desc">WL Gate. Automated quality workflow. An open gate frames a geometric WL monogram and a mint check node, on a deep blue background.</desc>
4
+ <defs>
5
+ <linearGradient id="wl-gate-dark-background" x1="0" y1="0" x2="920" y2="220" gradientUnits="userSpaceOnUse">
6
+ <stop stop-color="#0B2034"/>
7
+ <stop offset="1" stop-color="#102D43"/>
8
+ </linearGradient>
9
+ <linearGradient id="wl-gate-dark-tile" x1="34" y1="30" x2="194" y2="190" gradientUnits="userSpaceOnUse">
10
+ <stop stop-color="#1B405B"/>
11
+ <stop offset="1" stop-color="#102B42"/>
12
+ </linearGradient>
13
+ </defs>
14
+ <rect width="920" height="220" rx="28" fill="url(#wl-gate-dark-background)"/>
15
+ <rect x=".75" y=".75" width="918.5" height="218.5" rx="27.25" fill="none" stroke="#9CC9D8" stroke-opacity=".12" stroke-width="1.5"/>
16
+ <rect x="34" y="30" width="160" height="160" rx="36" fill="url(#wl-gate-dark-tile)"/>
17
+ <rect x="34.75" y="30.75" width="158.5" height="158.5" rx="35.25" fill="none" stroke="#91C4D7" stroke-opacity=".16" stroke-width="1.5"/>
18
+ <g transform="translate(50 46)" fill="none" stroke-linecap="round" stroke-linejoin="round">
19
+ <g stroke="#F2F8FC">
20
+ <path d="M18 106V22h92v19M18 106h60" stroke-width="9"/>
21
+ <path d="m31 50 10 37 13-25 13 25 10-37M90 50v37h18" stroke-width="8"/>
22
+ </g>
23
+ <circle cx="105" cy="105" r="17" stroke="#49D9BA" stroke-width="7"/>
24
+ <path d="m97 105 5 5 11-12" stroke="#49D9BA" stroke-width="6"/>
25
+ </g>
26
+ <g font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif">
27
+ <text x="246" y="63" fill="#88B5C5" font-size="14" font-weight="700" letter-spacing="3.8">WL ENGINEERING</text>
28
+ <text x="242" y="132" fill="#F2F8FC" font-size="66" font-weight="750" letter-spacing="-2.4">WL Gate</text>
29
+ <text x="246" y="174" fill="#9EBDC9" font-size="20" font-weight="450" letter-spacing=".2">Automated quality workflow</text>
30
+ </g>
31
+ <g fill="none" stroke-linecap="round" stroke-linejoin="round">
32
+ <path d="M739 110h95" stroke="#33596C" stroke-width="2"/>
33
+ <circle cx="739" cy="110" r="6" fill="#102D43" stroke="#6A96A8" stroke-width="2"/>
34
+ <circle cx="786" cy="110" r="6" fill="#102D43" stroke="#6A96A8" stroke-width="2"/>
35
+ <circle cx="841" cy="110" r="17" fill="#153F45" stroke="#49D9BA" stroke-width="2"/>
36
+ <path d="m834 110 5 5 9-10" stroke="#49D9BA" stroke-width="2.5"/>
37
+ </g>
38
+ </svg>
@@ -0,0 +1,37 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 920 220" role="img" aria-labelledby="wl-gate-title wl-gate-desc">
2
+ <title id="wl-gate-title">WL Gate — WL Engineering</title>
3
+ <desc id="wl-gate-desc">WL Gate. Automated quality workflow. An open gate frames a geometric WL monogram and a mint check node.</desc>
4
+ <defs>
5
+ <linearGradient id="wl-gate-background" x1="0" y1="0" x2="920" y2="220" gradientUnits="userSpaceOnUse">
6
+ <stop stop-color="#F7FAFC"/>
7
+ <stop offset="1" stop-color="#EEF6F8"/>
8
+ </linearGradient>
9
+ <linearGradient id="wl-gate-tile" x1="34" y1="30" x2="194" y2="190" gradientUnits="userSpaceOnUse">
10
+ <stop stop-color="#173B59"/>
11
+ <stop offset="1" stop-color="#0C233A"/>
12
+ </linearGradient>
13
+ </defs>
14
+ <rect width="920" height="220" rx="28" fill="url(#wl-gate-background)"/>
15
+ <rect x=".75" y=".75" width="918.5" height="218.5" rx="27.25" fill="none" stroke="#173B59" stroke-opacity=".08" stroke-width="1.5"/>
16
+ <rect x="34" y="30" width="160" height="160" rx="36" fill="url(#wl-gate-tile)"/>
17
+ <g transform="translate(50 46)" fill="none" stroke-linecap="round" stroke-linejoin="round">
18
+ <g stroke="#F2F8FC">
19
+ <path d="M18 106V22h92v19M18 106h60" stroke-width="9"/>
20
+ <path d="m31 50 10 37 13-25 13 25 10-37M90 50v37h18" stroke-width="8"/>
21
+ </g>
22
+ <circle cx="105" cy="105" r="17" stroke="#49D9BA" stroke-width="7"/>
23
+ <path d="m97 105 5 5 11-12" stroke="#49D9BA" stroke-width="6"/>
24
+ </g>
25
+ <g font-family="Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif">
26
+ <text x="246" y="63" fill="#3B6A80" font-size="14" font-weight="700" letter-spacing="3.8">WL ENGINEERING</text>
27
+ <text x="242" y="132" fill="#102E46" font-size="66" font-weight="750" letter-spacing="-2.4">WL Gate</text>
28
+ <text x="246" y="174" fill="#537083" font-size="20" font-weight="450" letter-spacing=".2">Automated quality workflow</text>
29
+ </g>
30
+ <g fill="none" stroke-linecap="round" stroke-linejoin="round">
31
+ <path d="M739 110h95" stroke="#B9CFD6" stroke-width="2"/>
32
+ <circle cx="739" cy="110" r="6" fill="#F2F8FA" stroke="#7296A5" stroke-width="2"/>
33
+ <circle cx="786" cy="110" r="6" fill="#F2F8FA" stroke="#7296A5" stroke-width="2"/>
34
+ <circle cx="841" cy="110" r="17" fill="#E0F5EE" stroke="#159D82" stroke-width="2"/>
35
+ <path d="m834 110 5 5 9-10" stroke="#159D82" stroke-width="2.5"/>
36
+ </g>
37
+ </svg>
@@ -0,0 +1,11 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" fill="none" role="img" aria-labelledby="wl-mark-title wl-mark-desc">
2
+ <title id="wl-mark-title">WL</title>
3
+ <desc id="wl-mark-desc">The WL Engineering monogram: geometric W and L inside an open gate, completed by a check node.</desc>
4
+ <g stroke="currentColor" stroke-linecap="round" stroke-linejoin="round">
5
+ <path d="M18 106V22h92v19" stroke-width="9"/>
6
+ <path d="m31 50 10 37 13-25 13 25 10-37M90 50v37h18" stroke-width="8"/>
7
+ <path d="M18 106h60" stroke-width="9"/>
8
+ <circle cx="105" cy="105" r="17" stroke-width="7"/>
9
+ <path d="m97 105 5 5 11-12" stroke-width="6"/>
10
+ </g>
11
+ </svg>