@agile-team/wl-skills-gate 0.9.0 → 0.10.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.
- package/CHANGELOG.md +13 -0
- package/README.md +74 -73
- package/assets/brand-tokens.json +144 -27
- package/assets/wl-bd-logo-dark.svg +29 -0
- package/assets/wl-bd-logo.svg +29 -0
- package/assets/wl-brand-lockup-dark.svg +1 -0
- package/assets/wl-brand-lockup.svg +1 -0
- package/assets/wl-design-logo-dark.svg +29 -0
- package/assets/wl-design-logo.svg +29 -0
- package/assets/wl-gate-logo-dark.svg +29 -38
- package/assets/wl-gate-logo.svg +29 -37
- package/assets/wl-kit-logo-dark.svg +29 -0
- package/assets/wl-kit-logo.svg +29 -0
- package/assets/wl-mark-small.svg +3 -0
- package/assets/wl-mark.svg +3 -11
- package/assets/wl-test-logo-dark.svg +29 -0
- package/assets/wl-test-logo.svg +29 -0
- package/assets/wl-ui-logo-dark.svg +29 -0
- package/assets/wl-ui-logo.svg +29 -0
- package/assets/wl-wordmark-dark.svg +5 -0
- package/assets/wl-wordmark.svg +5 -0
- package/bin/wl-quality-setup.js +18 -0
- package/bin/wl-skills-gate.js +4 -1
- package/docs/17-onboarding.md +27 -11
- package/docs/README.md +2 -2
- package/lib/automation.js +23 -3
- package/lib/onboard-complete.js +1 -1
- package/lib/onboard-config.js +29 -3
- package/lib/onboard.js +1 -0
- package/lib/release-input.js +114 -0
- package/lib/release-set.js +27 -5
- package/lib/setup-central.js +351 -0
- package/lib/setup-modes.js +84 -0
- package/lib/setup.js +160 -0
- package/lib/workspace-init.js +307 -0
- package/package.json +3 -2
- package/scripts/lib-tests/onboard-complete.test.mjs +7 -5
- package/scripts/lib-tests/onboard.test.mjs +5 -4
- package/scripts/lib-tests/release-input.test.mjs +162 -0
- package/scripts/lib-tests/setup-central.test.mjs +229 -0
- package/scripts/lib-tests/setup.test.mjs +71 -0
- package/scripts/lib-tests/workspace-init.test.mjs +271 -0
- package/templates/launchers/setup.cmd +8 -0
- package/templates/launchers/setup.command +8 -0
- package/templates/launchers/setup.sh +8 -0
- package/templates/onboarding/automation/ide-tasks.json +70 -8
- package/templates/onboarding/automation/workspace-setup.mjs +72 -0
- package/templates/onboarding/backend/java-unit.mjs +1 -1
- package/templates/onboarding/backend/quality-tools.package.json +2 -2
- package/templates/platform/release-input-config.json +51 -0
- package/templates/quality/rules.lock.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
## [0.10.0] — 2026-10-15
|
|
2
|
+
|
|
3
|
+
- 新增可启动的质量接入菜单和跨系统启动器,首次接入逐阶段展示、确认、执行、复扫与HTML反馈,不再要求人工传递计划摘要。
|
|
4
|
+
- 新增已接项目工作副本清单与独立初始化:固定锁安装、恢复本机Hook、实际正反验收,保留项目自定义策略;IDE打开任务只读预检。
|
|
5
|
+
- 新增中央接线预检与受控启动,核对配置、来源、身份、凭据存在性、密钥/状态绑定与回流;默认不联网、不启动、不发送,独立Review签发保持分离。
|
|
6
|
+
- 新增组合发布输入生成器,从可信采集原件生成并固定实际字节摘要,确认前后及签发前复核漂移,不代替业务决策、Review授权或部署。
|
|
7
|
+
|
|
8
|
+
## [0.9.1] — 2026-10-15
|
|
9
|
+
|
|
10
|
+
- 重写 README:按实际能力梳理定位、接入步骤、使用场景与验证入口,完整细节保留在对应手册。
|
|
11
|
+
- 统一 World Leading 精密工业系列 Logo,提供深浅色版本并纳入 npm 发布内容。
|
|
12
|
+
- 接入固定依赖同步至 Kit 2.33.1、UI 1.22.1、BD 0.41.1,完整接入同时核对对应实际安装版本。
|
|
13
|
+
|
|
1
14
|
# 0.9.0 — 2026-10-15
|
|
2
15
|
|
|
3
16
|
- 修复接入环境与依赖准备、候选Review上下文和索引、删除/暂存区修复恢复、真实阻断与必要环境关闭、消息隔离。
|
package/README.md
CHANGED
|
@@ -1,114 +1,115 @@
|
|
|
1
1
|
<p align="center">
|
|
2
2
|
<picture>
|
|
3
|
-
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ChenyCHENYU/wl-skills-gate/
|
|
4
|
-
<img src="https://raw.githubusercontent.com/ChenyCHENYU/wl-skills-gate/
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/ChenyCHENYU/wl-skills-gate/main/assets/wl-gate-logo-dark.svg" />
|
|
4
|
+
<img src="https://raw.githubusercontent.com/ChenyCHENYU/wl-skills-gate/main/assets/wl-gate-logo.svg" width="100%" alt="WL skills-gate · World Leading · Quality Automation" />
|
|
5
5
|
</picture>
|
|
6
6
|
</p>
|
|
7
7
|
|
|
8
|
-
<p align="center">
|
|
9
|
-
<strong>从提交检查到复验关闭的质量工程执行包</strong><br />
|
|
10
|
-
自动接入 · 脚本修复与复扫 · 九维 Review · 构建发布门禁
|
|
11
|
-
</p>
|
|
8
|
+
<p align="center"><strong>让项目检查、修复复扫、九维 Review 与构建发布接成一条可验证的质量流程。</strong></p>
|
|
12
9
|
|
|
13
10
|
<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=
|
|
15
|
-
<img src="https://img.shields.io/badge/Node.js-%E2%89%A522.12-
|
|
16
|
-
<img src="https://img.shields.io/badge/runtime_dependencies-0-
|
|
17
|
-
<a href="./LICENSE"><img src="https://img.shields.io/badge/license-authorization_required-64748B" alt="Authorization required" /></a>
|
|
11
|
+
<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=087A7D&label=npm" alt="npm version" /></a>
|
|
12
|
+
<img src="https://img.shields.io/badge/Node.js-%E2%89%A522.12-172634" alt="Node.js 22.12 or later" />
|
|
13
|
+
<img src="https://img.shields.io/badge/runtime_dependencies-0-087A7D" alt="Zero runtime dependencies" />
|
|
18
14
|
</p>
|
|
19
15
|
|
|
20
16
|
<p align="center">
|
|
21
|
-
<a href="
|
|
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>
|
|
17
|
+
<a href="#快速接入">快速接入</a> · <a href="#日常怎么用">日常流程</a> · <a href="#流水线怎么接">流水线接线</a> · <a href="./docs/README.md">技术手册</a>
|
|
27
18
|
</p>
|
|
28
19
|
|
|
29
|
-
|
|
20
|
+
## 解决什么
|
|
30
21
|
|
|
31
|
-
|
|
22
|
+
Gate 是质量执行与裁决层,复用项目已有检查器和适用的 WL 规则包。检查、报告、机械修复、复扫和通知由脚本执行,不调用大模型 API。
|
|
32
23
|
|
|
33
|
-
Gate
|
|
34
|
-
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
| 构建成功就被当作闭环 | 分别记录检查、Review、构建、部署和复验;满足关闭条件才结项 |
|
|
24
|
+
| 场景 | Gate 提供什么 | 能看到什么 |
|
|
25
|
+
| --- | --- | --- |
|
|
26
|
+
| 日常提交 | Hook 自动运行分档检查 | 问题位置、规则、修复建议与阻断原因 |
|
|
27
|
+
| 问题整改 | 预览方案 → 本人确认 → 白名单脚本 → 复扫 | 修前修后变化、剩余问题与回归项 |
|
|
28
|
+
| Code Review | 汇总九维证据,生成待确认草稿 | 非作者逐维确认后的正式 Review |
|
|
29
|
+
| 合并与发布 | 核验候选 SHA、必需检查、Review、制品和目标环境 | 绑定本次代码与制品的放行或拒绝结果 |
|
|
30
|
+
| 问题跟进 | 分类通知、认领、超时对账、独立复验 | 可追溯的处理与关闭记录 |
|
|
41
31
|
|
|
42
32
|
**九维范围:** 提交 · 分支 · 编码 · UI 与交互 · Code Review · 测试 · 扫描门禁 · CI/CD · 工程治理。
|
|
43
33
|
|
|
44
|
-
##
|
|
45
|
-
|
|
46
|
-
准备 **Node.js ≥22.12**,并使用项目固定的包管理器、检查器及 Java 工具链。以下命令由接入维护者执行一次;安装源可替换为团队批准的镜像。
|
|
34
|
+
## 快速接入
|
|
47
35
|
|
|
48
|
-
|
|
36
|
+
技术经理拿到批准的 Gate 完整包后,打开 `templates/launchers/setup.command`(macOS)、`setup.cmd`(Windows)或 `setup.sh`(Linux),按菜单选择任务。先提供 Node.js ≥22.12、项目固定的包管理器及原有构建工具。
|
|
49
37
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
| 任务 | 人只需做什么 | 脚本完成什么 |
|
|
39
|
+
| --- | --- | --- |
|
|
40
|
+
| 首次接入项目 | 选择 Git 项目根、批准安装源,确认各阶段差异 | 识别范围、安装固定依赖、同步规则、Hook、POM/锁、首扫及提交说明正反验证 |
|
|
41
|
+
| 新成员初始化 | 选择已接项目,在安装与激活计划上确认 | 按仓库已提交清单恢复本机环境,保留项目策略,再验真实 Hook |
|
|
42
|
+
| 运维接线 | 选择批准配置目录,预检后选择启动 | 核对配置/身份/凭据存在性/旧状态,启动中央采集与操作入口;消息默认预览 |
|
|
43
|
+
| 组合发布输入 | 选择批准配置,确认组件与输出 | 从真实采集原件生成输入,核验来源、SHA、制品与兼容证据 |
|
|
54
44
|
|
|
55
|
-
|
|
45
|
+
也可用一个命令启动相同交互流程;进入后无需复制计划摘要或拼接后续命令:
|
|
56
46
|
|
|
57
47
|
```bash
|
|
58
|
-
npx --yes
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
npx --yes --ignore-scripts --registry https://registry.npmjs.org/ \
|
|
49
|
+
--@agile-team:registry=https://registry.npmjs.org/ \
|
|
50
|
+
@agile-team/wl-skills-gate@0.10.0 setup project
|
|
61
51
|
```
|
|
62
52
|
|
|
63
|
-
|
|
53
|
+
| 项目 | 依赖装在哪里 | 业务构建 |
|
|
54
|
+
| --- | --- | --- |
|
|
55
|
+
| PC Vue 管理端,如 `wl-ui-produce` | 根 `package.json`:Gate / Kit / UI | 保留原前端构建 |
|
|
56
|
+
| Java/Maven,如 `wl-produce` | `quality-tools/package.json`:Gate / BD | Maven;Node 工具不进入 jar |
|
|
57
|
+
|
|
58
|
+
`quality-tools/` 是 Java 仓库内的 Node 工具依赖目录。内置后端配套针对 `wl-produce` PL;其他 Maven 项目先由负责人配置模块与必测。移动端、UniApp 不套用 PC 配套。
|
|
64
59
|
|
|
65
|
-
|
|
60
|
+
首次接入反馈在 `quality-reports/setup/<sessionId>/result.html`,质量报告在 `quality-reports/quality-report.html`。只有真实首扫及 Hook 正反验证通过,才返回 `local-validated-awaiting-remote-acceptance`。GitLab/Jenkins 强制检查、独立 Review、真实到群及部署另做现场验收。
|
|
66
61
|
|
|
67
|
-
|
|
68
|
-
| --- | --- | --- |
|
|
69
|
-
| PC Vue 前端,如 `wl-ui-produce` | 现有 `package.json` / `node_modules` | 沿用原前端构建 |
|
|
70
|
-
| Java/Maven 后端,如 `wl-produce` | 独立的 `quality-tools/` 目录 | 沿用 Maven,Node 工具不进入 jar |
|
|
62
|
+
接线配置、非交互任务参数与失败处理见 [接入指南](./docs/17-onboarding.md)。
|
|
71
63
|
|
|
72
|
-
|
|
64
|
+
## 日常怎么用
|
|
73
65
|
|
|
74
|
-
|
|
66
|
+
开发者正常提交、推送;Hook 自动检查。以 `wl-ui-produce` 修改订单列表为例:
|
|
75
67
|
|
|
76
|
-
|
|
|
68
|
+
| 步骤 | 开发者 / 负责人做什么 | 系统给出什么 |
|
|
77
69
|
| --- | --- | --- |
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
81
|
-
|
|
|
82
|
-
|
|
|
70
|
+
| 提交前 | 按原流程暂存、提交代码 | 快速检查;有阻断显示具体位置和建议 |
|
|
71
|
+
| 推送前 | 正常推送 | 标准检查、HTML 报告;已配置 Review 策略时自动生成九维草稿 |
|
|
72
|
+
| 处理问题 | 在已生成的编辑器任务中选择“预览脚本修复”,核对并确认 | 执行批准的机械脚本、自动复扫,展示差异;语义问题保留人工处理 |
|
|
73
|
+
| 发起 Review | 非作者查看代码、补齐实际交互与业务证据、逐维确认 | 绑定当前候选与证据的正式 Review |
|
|
74
|
+
| 构建发布 | 通过受控流水线推进 | 核验本次候选、检查和制品;部署后独立复验再关闭问题 |
|
|
83
75
|
|
|
84
|
-
|
|
76
|
+
同口径的修前修后报告才展示质量变化。扫描通过、Review 确认、发布授权和问题关闭分别核验;一项通过不会代替其余步骤。
|
|
85
77
|
|
|
86
|
-
|
|
78
|
+
## 流水线怎么接
|
|
87
79
|
|
|
88
|
-
|
|
80
|
+
由 GitLab / Jenkins 维护者接线,项目负责人确认规则与必测,通知负责人配置群与分类。执行模板都在本包中。
|
|
89
81
|
|
|
90
|
-
|
|
|
91
|
-
| --- | --- |
|
|
92
|
-
|
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
| `quality-tools/` | Java 仓库的 Node 工具目录,里面安装 Gate / BD;不是另一个包 |
|
|
82
|
+
| 接线内容 | 入口 | 验证方式 |
|
|
83
|
+
| --- | --- | --- |
|
|
84
|
+
| GitLab MR、候选与受保护分支 | [CI 模板](./templates/ci) · [GitLab 指南](./docs/06-gitlab.md) | 违规候选不能合并,真实必需作业齐全 |
|
|
85
|
+
| Jenkins 构建、制品与部署 | [Jenkins 指南](./docs/07-jenkins.md) | SHA、制品摘要、目标环境一致,缺证据拒绝推进 |
|
|
86
|
+
| 真实 CI 证据、身份与 Review | [可信 CI 采集](./docs/18-ci-source.md) · [九维 Review](./docs/19-nine-dimension-review.md) | 旧报告、缺证据、自审与过期批准被拒绝 |
|
|
87
|
+
| 飞书通知、认领、超时与复验 | [中央执行接线](./templates/platform/README.md) | 实际送达、失败重试、认领和独立关闭均留记录 |
|
|
97
88
|
|
|
98
|
-
|
|
89
|
+
项目检查作业与受控签发、部署、通知作业隔离。Hook 提供早反馈;服务端强制检查负责防绕过。
|
|
99
90
|
|
|
100
|
-
##
|
|
91
|
+
## 按需深入
|
|
101
92
|
|
|
102
|
-
| 要做什么 |
|
|
93
|
+
| 要做什么 | 文档 |
|
|
103
94
|
| --- | --- |
|
|
104
|
-
|
|
|
105
|
-
|
|
|
106
|
-
|
|
|
107
|
-
|
|
|
108
|
-
| 验证、升级与排障 | [完整索引](./docs/README.md) · [自测与环境验收](./docs/09-selftest-coverage.md) · [更新记录](./CHANGELOG.md) |
|
|
95
|
+
| 调整检查器、范围、等级与例外 | [策略配置](./docs/02-config.md) · [适配器](./docs/05-adapters.md) |
|
|
96
|
+
| 维护修复白名单、漂移检查与回滚 | [修复闭环](./docs/04-fix-loop.md) |
|
|
97
|
+
| 只读定位问题,减少重复扫描与上下文 | [低 token 执行](./docs/14-low-token-execution.md) · [Java 报告分级](./docs/15-java-report-triage.md) |
|
|
98
|
+
| 排查接入与环境问题 | [项目与运维集成](./docs/16-project-ci-integration.md) · [完整索引](./docs/README.md) |
|
|
109
99
|
|
|
110
|
-
|
|
100
|
+
检查退出码:`0` 通过,`1` 质量阻断,`2` 执行或证据无效。后两者都需要处理,不得以历史绿报告替代本轮结果。
|
|
111
101
|
|
|
112
|
-
|
|
102
|
+
## WL 系列
|
|
113
103
|
|
|
114
|
-
|
|
104
|
+
**WL = World Leading。** 按职责组合,未使用的包无需安装。
|
|
105
|
+
|
|
106
|
+
| 包 | 职责 |
|
|
107
|
+
| --- | --- |
|
|
108
|
+
| **Gate** | 统一接入、检查裁决、修复复扫、Review 与发布证据 |
|
|
109
|
+
| [Kit](https://github.com/ChenyCHENYU/wl-skills-kit) | PC Vue 管理端需求、契约、代码生成与工程规范 |
|
|
110
|
+
| [UI](https://github.com/ChenyCHENYU/wl-skills-ui) | PC 管理端设计令牌、样式与交互质量 |
|
|
111
|
+
| [BD](https://github.com/ChenyCHENYU/wl-skills-bd) | Java 后端规范、契约与检查能力 |
|
|
112
|
+
| [Test](https://github.com/ChenyCHENYU/wl-skills-test) | 测试设计、执行与结果验证 |
|
|
113
|
+
| [Design](https://github.com/ChenyCHENYU/wl-skills-design) | 需求与设计模型、交付契约 |
|
|
114
|
+
|
|
115
|
+
使用授权见 [LICENSE](./LICENSE)。问题反馈请附包版本、执行命令和脱敏报告,提交至 [Issues](https://github.com/ChenyCHENYU/wl-skills-gate/issues)。
|
package/assets/brand-tokens.json
CHANGED
|
@@ -1,45 +1,162 @@
|
|
|
1
1
|
{
|
|
2
|
-
"schemaVersion":
|
|
3
|
-
"
|
|
4
|
-
"
|
|
2
|
+
"schemaVersion": 2,
|
|
3
|
+
"brand": "World Leading",
|
|
4
|
+
"acronym": "WL",
|
|
5
|
+
"series": "World Leading",
|
|
6
|
+
"product": "skills-gate",
|
|
5
7
|
"tagline": "Automated quality workflow",
|
|
6
8
|
"mark": {
|
|
7
9
|
"file": "wl-mark.svg",
|
|
8
|
-
"viewBox": "0 0
|
|
10
|
+
"viewBox": "0 0 256 168",
|
|
9
11
|
"color": "currentColor",
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
|
|
12
|
+
"minimumWidthPx": 48,
|
|
13
|
+
"smallVariant": {
|
|
14
|
+
"file": "wl-mark-small.svg",
|
|
15
|
+
"minimumWidthPx": 32,
|
|
16
|
+
"opticalAdjustment": "L moves 8 viewBox units to preserve a 2px gap at 32px width"
|
|
17
|
+
},
|
|
18
|
+
"clearSpace": "At least half the cap height",
|
|
19
|
+
"construction": {
|
|
20
|
+
"wPath": "M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z",
|
|
21
|
+
"lPath": "M181 24H205L174 112H226L218 136H142Z",
|
|
22
|
+
"language": "Precision-cut W and forward-cut L; preserve geometry across products"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"wordmark": {
|
|
26
|
+
"light": "wl-wordmark.svg",
|
|
27
|
+
"dark": "wl-wordmark-dark.svg",
|
|
28
|
+
"viewBox": "0 0 760 160"
|
|
13
29
|
},
|
|
14
30
|
"banner": {
|
|
15
|
-
"viewBox": "0 0
|
|
31
|
+
"viewBox": "0 0 1280 340",
|
|
16
32
|
"light": "wl-gate-logo.svg",
|
|
17
33
|
"dark": "wl-gate-logo-dark.svg",
|
|
18
|
-
"cornerRadius":
|
|
34
|
+
"cornerRadius": 16
|
|
19
35
|
},
|
|
20
36
|
"palette": {
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"
|
|
25
|
-
"
|
|
26
|
-
"paper": "#
|
|
27
|
-
"
|
|
28
|
-
"
|
|
29
|
-
"textMutedLight": "#
|
|
30
|
-
"textMutedDark": "#
|
|
37
|
+
"obsidian": "#0B1119",
|
|
38
|
+
"graphite": "#111E2C",
|
|
39
|
+
"ink": "#172634",
|
|
40
|
+
"platinum": "#F0F4F6",
|
|
41
|
+
"silver": "#B8C3CE",
|
|
42
|
+
"paper": "#F7F8F8",
|
|
43
|
+
"gateLight": "#087A7D",
|
|
44
|
+
"gateDark": "#8DDEDC",
|
|
45
|
+
"textMutedLight": "#637686",
|
|
46
|
+
"textMutedDark": "#8E9FAF"
|
|
31
47
|
},
|
|
32
48
|
"typography": {
|
|
33
|
-
"family": "
|
|
34
|
-
"productSize":
|
|
35
|
-
"productWeight":
|
|
36
|
-
"
|
|
37
|
-
"
|
|
49
|
+
"family": "Helvetica Neue, Inter, Helvetica, Arial, sans-serif",
|
|
50
|
+
"productSize": 90,
|
|
51
|
+
"productWeight": 550,
|
|
52
|
+
"productTracking": -4,
|
|
53
|
+
"brandSize": 16,
|
|
54
|
+
"brandTracking": 3.15,
|
|
38
55
|
"taglineSize": 20
|
|
39
56
|
},
|
|
40
57
|
"extension": {
|
|
41
|
-
"shared": [
|
|
42
|
-
|
|
43
|
-
|
|
58
|
+
"shared": [
|
|
59
|
+
"WL monogram",
|
|
60
|
+
"WORLD LEADING below the monogram",
|
|
61
|
+
"Fixed brand/product zones",
|
|
62
|
+
"Product title with skills- prefix",
|
|
63
|
+
"Metadata and glyph grid"
|
|
64
|
+
],
|
|
65
|
+
"perProduct": [
|
|
66
|
+
"Package suffix",
|
|
67
|
+
"Module accent",
|
|
68
|
+
"Functional geometric symbol",
|
|
69
|
+
"Functional tagline",
|
|
70
|
+
"Exact npm package identifier"
|
|
71
|
+
],
|
|
72
|
+
"accentSuggestions": {
|
|
73
|
+
"gate": "#8DDEDC",
|
|
74
|
+
"kit": "#9CC5FF",
|
|
75
|
+
"ui": "#CCB8FF",
|
|
76
|
+
"test": "#E7A7B8",
|
|
77
|
+
"design": "#EAAF8A",
|
|
78
|
+
"bd": "#DFC291"
|
|
79
|
+
},
|
|
80
|
+
"examples": [
|
|
81
|
+
"skills-gate",
|
|
82
|
+
"skills-kit",
|
|
83
|
+
"skills-ui",
|
|
84
|
+
"skills-test",
|
|
85
|
+
"skills-design",
|
|
86
|
+
"skills-bd"
|
|
87
|
+
]
|
|
88
|
+
},
|
|
89
|
+
"production": {
|
|
90
|
+
"smallMarks": "Single flat color, no gradients",
|
|
91
|
+
"lightTheme": "Flat ink mark",
|
|
92
|
+
"darkTheme": "Subtle silver gradient is optional in banners",
|
|
93
|
+
"masterFiles": "All assets are native editable SVG"
|
|
94
|
+
},
|
|
95
|
+
"brandLockup": {
|
|
96
|
+
"light": "wl-brand-lockup.svg",
|
|
97
|
+
"dark": "wl-brand-lockup-dark.svg",
|
|
98
|
+
"arrangement": "WL above WORLD LEADING"
|
|
99
|
+
},
|
|
100
|
+
"packageFamily": {
|
|
101
|
+
"gate": {
|
|
102
|
+
"displayName": "skills-gate",
|
|
103
|
+
"npmName": "@agile-team/wl-skills-gate",
|
|
104
|
+
"category": "QUALITY AUTOMATION",
|
|
105
|
+
"tagline": "Checks · Review · Release",
|
|
106
|
+
"darkAccent": "#8DDEDC",
|
|
107
|
+
"lightAccent": "#087A7D",
|
|
108
|
+
"light": "wl-gate-logo.svg",
|
|
109
|
+
"dark": "wl-gate-logo-dark.svg"
|
|
110
|
+
},
|
|
111
|
+
"kit": {
|
|
112
|
+
"displayName": "skills-kit",
|
|
113
|
+
"npmName": "@agile-team/wl-skills-kit",
|
|
114
|
+
"category": "FRONTEND ENGINEERING",
|
|
115
|
+
"tagline": "Standards · Contracts · Workflows",
|
|
116
|
+
"darkAccent": "#9CC5FF",
|
|
117
|
+
"lightAccent": "#315E9F",
|
|
118
|
+
"light": "wl-kit-logo.svg",
|
|
119
|
+
"dark": "wl-kit-logo-dark.svg"
|
|
120
|
+
},
|
|
121
|
+
"ui": {
|
|
122
|
+
"displayName": "skills-ui",
|
|
123
|
+
"npmName": "@agile-team/wl-skills-ui",
|
|
124
|
+
"category": "INTERFACE QUALITY",
|
|
125
|
+
"tagline": "Tokens · Layouts · Interaction",
|
|
126
|
+
"darkAccent": "#CCB8FF",
|
|
127
|
+
"lightAccent": "#7053A7",
|
|
128
|
+
"light": "wl-ui-logo.svg",
|
|
129
|
+
"dark": "wl-ui-logo-dark.svg"
|
|
130
|
+
},
|
|
131
|
+
"test": {
|
|
132
|
+
"displayName": "skills-test",
|
|
133
|
+
"npmName": "@agile-team/wl-skills-test",
|
|
134
|
+
"category": "TEST ENGINEERING",
|
|
135
|
+
"tagline": "Cases · Automation · Evidence",
|
|
136
|
+
"darkAccent": "#E7A7B8",
|
|
137
|
+
"lightAccent": "#A34262",
|
|
138
|
+
"light": "wl-test-logo.svg",
|
|
139
|
+
"dark": "wl-test-logo-dark.svg"
|
|
140
|
+
},
|
|
141
|
+
"design": {
|
|
142
|
+
"displayName": "skills-design",
|
|
143
|
+
"npmName": "@agile-team/wl-skills-design",
|
|
144
|
+
"category": "PRODUCT DESIGN",
|
|
145
|
+
"tagline": "Requirements · Flows · Prototypes",
|
|
146
|
+
"darkAccent": "#EAAF8A",
|
|
147
|
+
"lightAccent": "#A45C2B",
|
|
148
|
+
"light": "wl-design-logo.svg",
|
|
149
|
+
"dark": "wl-design-logo-dark.svg"
|
|
150
|
+
},
|
|
151
|
+
"bd": {
|
|
152
|
+
"displayName": "skills-bd",
|
|
153
|
+
"npmName": "@agile-team/wl-skills-bd",
|
|
154
|
+
"category": "BACKEND ENGINEERING",
|
|
155
|
+
"tagline": "Java · Contracts · Quality",
|
|
156
|
+
"darkAccent": "#DFC291",
|
|
157
|
+
"lightAccent": "#886331",
|
|
158
|
+
"light": "wl-bd-logo.svg",
|
|
159
|
+
"dark": "wl-bd-logo-dark.svg"
|
|
160
|
+
}
|
|
44
161
|
}
|
|
45
162
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 340" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">WL · World Leading · skills-bd</title>
|
|
3
|
+
<desc id="desc">World Leading signature on the left. The skills-bd package, backend engineering, on the right. Shared precision industrial identity.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="surface" x1="0" y1="0" x2="1280" y2="340" gradientUnits="userSpaceOnUse"><stop stop-color="#0B1119"/><stop offset="1" stop-color="#111E2C"/></linearGradient>
|
|
6
|
+
<linearGradient id="metal" x1="0" y1="22" x2="200" y2="149" gradientUnits="userSpaceOnUse"><stop stop-color="#F7FAFA"/><stop offset=".58" stop-color="#B4C3CE"/><stop offset="1" stop-color="#E7EEF2"/></linearGradient>
|
|
7
|
+
<linearGradient id="rule" gradientUnits="userSpaceOnUse" x1="400" y1="281" x2="1218" y2="281"><stop stop-color="#52677C" stop-opacity=".4"/><stop offset="1" stop-color="#52677C" stop-opacity=".12"/></linearGradient>
|
|
8
|
+
<clipPath id="canvas"><rect width="1280" height="340" rx="16"/></clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
<g clip-path="url(#canvas)">
|
|
11
|
+
<rect width="1280" height="340" fill="url(#surface)"/>
|
|
12
|
+
<path d="M1247 0H1280V340H1148Z" fill="#DFC291" opacity=".035"/>
|
|
13
|
+
<g transform="translate(60 58) scale(1.12)" fill="url(#metal)"><path d="M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z"/><path d="M181 24H205L174 112H226L218 136H142Z"/><path d="M174 112H226L218 136H166Z" fill="#DFC291"/></g>
|
|
14
|
+
<text x="195" y="258" text-anchor="middle" fill="#9CAAB8" font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif" font-size="16" font-weight="500" letter-spacing="3.15">WORLD LEADING</text>
|
|
15
|
+
<path d="M352 72V278" stroke="#52677C" stroke-opacity=".35"/>
|
|
16
|
+
<path d="M352 153V192" stroke="#DFC291" stroke-opacity=".85" stroke-width="2"/>
|
|
17
|
+
<g font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif">
|
|
18
|
+
<text x="400" y="88" fill="#DFC291" font-size="12" font-weight="600" letter-spacing="3.5">BACKEND ENGINEERING</text>
|
|
19
|
+
<text x="393" y="187" font-size="90" letter-spacing="-4"><tspan fill="#9CAAB8" font-weight="350">skills-</tspan><tspan fill="#F0F4F6" font-weight="550">bd</tspan></text>
|
|
20
|
+
<text x="400" y="236" fill="#8E9FAF" font-size="20" font-weight="400" letter-spacing=".2">Java · Contracts · Quality</text>
|
|
21
|
+
</g>
|
|
22
|
+
<path d="M400 281H1218" stroke="url(#rule)"/>
|
|
23
|
+
<text x="400" y="311" fill="#8E9FAF" font-family="'SFMono-Regular', Consolas, 'Liberation Mono', monospace" font-size="13" letter-spacing=".15">@agile-team/wl-skills-bd</text>
|
|
24
|
+
<g transform="translate(1049 83) scale(1.68)" fill="none" stroke="#DFC291" stroke-linecap="square" stroke-linejoin="miter">
|
|
25
|
+
<path d="M8 23V8H23M73 8H88V23M88 73V88H73M23 88H8V73" stroke-width=".8" opacity=".22"/>
|
|
26
|
+
<g stroke-width="2" opacity=".85"><path d="M17 35 48 19 79 35 48 51ZM17 49 48 65 79 49M17 63 48 79 79 63"/><path d="M48 19 63 27" stroke-width="4"/></g>
|
|
27
|
+
</g>
|
|
28
|
+
<rect x=".5" y=".5" width="1279" height="339" rx="15.5" fill="none" stroke="#52677C" stroke-opacity=".2"/>
|
|
29
|
+
</g></svg>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 340" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">WL · World Leading · skills-bd</title>
|
|
3
|
+
<desc id="desc">World Leading signature on the left. The skills-bd package, backend engineering, on the right. Shared precision industrial identity.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="surface" x1="0" y1="0" x2="1280" y2="340" gradientUnits="userSpaceOnUse"><stop stop-color="#F7F8F8"/><stop offset="1" stop-color="#EFF2F4"/></linearGradient>
|
|
6
|
+
<linearGradient id="metal" x1="0" y1="22" x2="200" y2="149" gradientUnits="userSpaceOnUse"><stop stop-color="#21394D"/><stop offset=".58" stop-color="#0C2031"/><stop offset="1" stop-color="#284156"/></linearGradient>
|
|
7
|
+
<linearGradient id="rule" gradientUnits="userSpaceOnUse" x1="400" y1="281" x2="1218" y2="281"><stop stop-color="#AEBCC6" stop-opacity=".4"/><stop offset="1" stop-color="#AEBCC6" stop-opacity=".12"/></linearGradient>
|
|
8
|
+
<clipPath id="canvas"><rect width="1280" height="340" rx="16"/></clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
<g clip-path="url(#canvas)">
|
|
11
|
+
<rect width="1280" height="340" fill="url(#surface)"/>
|
|
12
|
+
<path d="M1247 0H1280V340H1148Z" fill="#886331" opacity=".04"/>
|
|
13
|
+
<g transform="translate(60 58) scale(1.12)" fill="#172634"><path d="M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z"/><path d="M181 24H205L174 112H226L218 136H142Z"/><path d="M174 112H226L218 136H166Z" fill="#886331"/></g>
|
|
14
|
+
<text x="195" y="258" text-anchor="middle" fill="#687A89" font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif" font-size="16" font-weight="500" letter-spacing="3.15">WORLD LEADING</text>
|
|
15
|
+
<path d="M352 72V278" stroke="#AEBCC6" stroke-opacity=".35"/>
|
|
16
|
+
<path d="M352 153V192" stroke="#886331" stroke-opacity=".85" stroke-width="2"/>
|
|
17
|
+
<g font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif">
|
|
18
|
+
<text x="400" y="88" fill="#886331" font-size="12" font-weight="600" letter-spacing="3.5">BACKEND ENGINEERING</text>
|
|
19
|
+
<text x="393" y="187" font-size="90" letter-spacing="-4"><tspan fill="#687A89" font-weight="350">skills-</tspan><tspan fill="#172634" font-weight="550">bd</tspan></text>
|
|
20
|
+
<text x="400" y="236" fill="#637686" font-size="20" font-weight="400" letter-spacing=".2">Java · Contracts · Quality</text>
|
|
21
|
+
</g>
|
|
22
|
+
<path d="M400 281H1218" stroke="url(#rule)"/>
|
|
23
|
+
<text x="400" y="311" fill="#637686" font-family="'SFMono-Regular', Consolas, 'Liberation Mono', monospace" font-size="13" letter-spacing=".15">@agile-team/wl-skills-bd</text>
|
|
24
|
+
<g transform="translate(1049 83) scale(1.68)" fill="none" stroke="#886331" stroke-linecap="square" stroke-linejoin="miter">
|
|
25
|
+
<path d="M8 23V8H23M73 8H88V23M88 73V88H73M23 88H8V73" stroke-width=".8" opacity=".22"/>
|
|
26
|
+
<g stroke-width="2" opacity=".85"><path d="M17 35 48 19 79 35 48 51ZM17 49 48 65 79 49M17 63 48 79 79 63"/><path d="M48 19 63 27" stroke-width="4"/></g>
|
|
27
|
+
</g>
|
|
28
|
+
<rect x=".5" y=".5" width="1279" height="339" rx="15.5" fill="none" stroke="#AEBCC6" stroke-opacity=".2"/>
|
|
29
|
+
</g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 224" role="img" aria-labelledby="title desc"><title id="title">WL · World Leading</title><desc id="desc">Fixed World Leading parent-brand lockup. WL monogram above WORLD LEADING.</desc><g fill="#EEF1F2"><path d="M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z"/><path d="M181 24H205L174 112H226L218 136H142Z"/></g><text x="122" y="187" text-anchor="middle" fill="#EEF1F2" font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif" font-size="12" font-weight="500" letter-spacing="2.9">WORLD LEADING</text></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 224" role="img" aria-labelledby="title desc"><title id="title">WL · World Leading</title><desc id="desc">Fixed World Leading parent-brand lockup. WL monogram above WORLD LEADING.</desc><g fill="#172634"><path d="M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z"/><path d="M181 24H205L174 112H226L218 136H142Z"/></g><text x="122" y="187" text-anchor="middle" fill="#172634" font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif" font-size="12" font-weight="500" letter-spacing="2.9">WORLD LEADING</text></svg>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 340" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">WL · World Leading · skills-design</title>
|
|
3
|
+
<desc id="desc">World Leading signature on the left. The skills-design package, product design, on the right. Shared precision industrial identity.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="surface" x1="0" y1="0" x2="1280" y2="340" gradientUnits="userSpaceOnUse"><stop stop-color="#0B1119"/><stop offset="1" stop-color="#111E2C"/></linearGradient>
|
|
6
|
+
<linearGradient id="metal" x1="0" y1="22" x2="200" y2="149" gradientUnits="userSpaceOnUse"><stop stop-color="#F7FAFA"/><stop offset=".58" stop-color="#B4C3CE"/><stop offset="1" stop-color="#E7EEF2"/></linearGradient>
|
|
7
|
+
<linearGradient id="rule" gradientUnits="userSpaceOnUse" x1="400" y1="281" x2="1218" y2="281"><stop stop-color="#52677C" stop-opacity=".4"/><stop offset="1" stop-color="#52677C" stop-opacity=".12"/></linearGradient>
|
|
8
|
+
<clipPath id="canvas"><rect width="1280" height="340" rx="16"/></clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
<g clip-path="url(#canvas)">
|
|
11
|
+
<rect width="1280" height="340" fill="url(#surface)"/>
|
|
12
|
+
<path d="M1247 0H1280V340H1148Z" fill="#EAAF8A" opacity=".035"/>
|
|
13
|
+
<g transform="translate(60 58) scale(1.12)" fill="url(#metal)"><path d="M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z"/><path d="M181 24H205L174 112H226L218 136H142Z"/><path d="M174 112H226L218 136H166Z" fill="#EAAF8A"/></g>
|
|
14
|
+
<text x="195" y="258" text-anchor="middle" fill="#9CAAB8" font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif" font-size="16" font-weight="500" letter-spacing="3.15">WORLD LEADING</text>
|
|
15
|
+
<path d="M352 72V278" stroke="#52677C" stroke-opacity=".35"/>
|
|
16
|
+
<path d="M352 153V192" stroke="#EAAF8A" stroke-opacity=".85" stroke-width="2"/>
|
|
17
|
+
<g font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif">
|
|
18
|
+
<text x="400" y="88" fill="#EAAF8A" font-size="12" font-weight="600" letter-spacing="3.5">PRODUCT DESIGN</text>
|
|
19
|
+
<text x="393" y="187" font-size="90" letter-spacing="-4"><tspan fill="#9CAAB8" font-weight="350">skills-</tspan><tspan fill="#F0F4F6" font-weight="550">design</tspan></text>
|
|
20
|
+
<text x="400" y="236" fill="#8E9FAF" font-size="20" font-weight="400" letter-spacing=".2">Requirements · Flows · Prototypes</text>
|
|
21
|
+
</g>
|
|
22
|
+
<path d="M400 281H1218" stroke="url(#rule)"/>
|
|
23
|
+
<text x="400" y="311" fill="#8E9FAF" font-family="'SFMono-Regular', Consolas, 'Liberation Mono', monospace" font-size="13" letter-spacing=".15">@agile-team/wl-skills-design</text>
|
|
24
|
+
<g transform="translate(1049 83) scale(1.68)" fill="none" stroke="#EAAF8A" stroke-linecap="square" stroke-linejoin="miter">
|
|
25
|
+
<path d="M8 23V8H23M73 8H88V23M88 73V88H73M23 88H8V73" stroke-width=".8" opacity=".22"/>
|
|
26
|
+
<g stroke-width="2" opacity=".85"><path d="M17 17H39V39H17ZM57 57H79V79H57ZM57 17H79V39H57ZM17 57H39V79H17ZM39 28H57M28 39V57M68 39V57M39 68H57"/><path d="M57 28 51 24M57 28 51 32"/><path d="M68 57 64 51M68 57 72 51"/></g>
|
|
27
|
+
</g>
|
|
28
|
+
<rect x=".5" y=".5" width="1279" height="339" rx="15.5" fill="none" stroke="#52677C" stroke-opacity=".2"/>
|
|
29
|
+
</g></svg>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1280 340" role="img" aria-labelledby="title desc">
|
|
2
|
+
<title id="title">WL · World Leading · skills-design</title>
|
|
3
|
+
<desc id="desc">World Leading signature on the left. The skills-design package, product design, on the right. Shared precision industrial identity.</desc>
|
|
4
|
+
<defs>
|
|
5
|
+
<linearGradient id="surface" x1="0" y1="0" x2="1280" y2="340" gradientUnits="userSpaceOnUse"><stop stop-color="#F7F8F8"/><stop offset="1" stop-color="#EFF2F4"/></linearGradient>
|
|
6
|
+
<linearGradient id="metal" x1="0" y1="22" x2="200" y2="149" gradientUnits="userSpaceOnUse"><stop stop-color="#21394D"/><stop offset=".58" stop-color="#0C2031"/><stop offset="1" stop-color="#284156"/></linearGradient>
|
|
7
|
+
<linearGradient id="rule" gradientUnits="userSpaceOnUse" x1="400" y1="281" x2="1218" y2="281"><stop stop-color="#AEBCC6" stop-opacity=".4"/><stop offset="1" stop-color="#AEBCC6" stop-opacity=".12"/></linearGradient>
|
|
8
|
+
<clipPath id="canvas"><rect width="1280" height="340" rx="16"/></clipPath>
|
|
9
|
+
</defs>
|
|
10
|
+
<g clip-path="url(#canvas)">
|
|
11
|
+
<rect width="1280" height="340" fill="url(#surface)"/>
|
|
12
|
+
<path d="M1247 0H1280V340H1148Z" fill="#A45C2B" opacity=".04"/>
|
|
13
|
+
<g transform="translate(60 58) scale(1.12)" fill="#172634"><path d="M18 24H42L58 84L82 24H104L126 84L145 24H170L134 136H111L93 100L76 136H53Z"/><path d="M181 24H205L174 112H226L218 136H142Z"/><path d="M174 112H226L218 136H166Z" fill="#A45C2B"/></g>
|
|
14
|
+
<text x="195" y="258" text-anchor="middle" fill="#687A89" font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif" font-size="16" font-weight="500" letter-spacing="3.15">WORLD LEADING</text>
|
|
15
|
+
<path d="M352 72V278" stroke="#AEBCC6" stroke-opacity=".35"/>
|
|
16
|
+
<path d="M352 153V192" stroke="#A45C2B" stroke-opacity=".85" stroke-width="2"/>
|
|
17
|
+
<g font-family="'Helvetica Neue', Inter, Helvetica, Arial, sans-serif">
|
|
18
|
+
<text x="400" y="88" fill="#A45C2B" font-size="12" font-weight="600" letter-spacing="3.5">PRODUCT DESIGN</text>
|
|
19
|
+
<text x="393" y="187" font-size="90" letter-spacing="-4"><tspan fill="#687A89" font-weight="350">skills-</tspan><tspan fill="#172634" font-weight="550">design</tspan></text>
|
|
20
|
+
<text x="400" y="236" fill="#637686" font-size="20" font-weight="400" letter-spacing=".2">Requirements · Flows · Prototypes</text>
|
|
21
|
+
</g>
|
|
22
|
+
<path d="M400 281H1218" stroke="url(#rule)"/>
|
|
23
|
+
<text x="400" y="311" fill="#637686" font-family="'SFMono-Regular', Consolas, 'Liberation Mono', monospace" font-size="13" letter-spacing=".15">@agile-team/wl-skills-design</text>
|
|
24
|
+
<g transform="translate(1049 83) scale(1.68)" fill="none" stroke="#A45C2B" stroke-linecap="square" stroke-linejoin="miter">
|
|
25
|
+
<path d="M8 23V8H23M73 8H88V23M88 73V88H73M23 88H8V73" stroke-width=".8" opacity=".22"/>
|
|
26
|
+
<g stroke-width="2" opacity=".85"><path d="M17 17H39V39H17ZM57 57H79V79H57ZM57 17H79V39H57ZM17 57H39V79H17ZM39 28H57M28 39V57M68 39V57M39 68H57"/><path d="M57 28 51 24M57 28 51 32"/><path d="M68 57 64 51M68 57 72 51"/></g>
|
|
27
|
+
</g>
|
|
28
|
+
<rect x=".5" y=".5" width="1279" height="339" rx="15.5" fill="none" stroke="#AEBCC6" stroke-opacity=".2"/>
|
|
29
|
+
</g></svg>
|