@agile-team/wl-skills-gate 0.6.1 → 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.
- package/CHANGELOG.md +24 -0
- package/README.md +89 -54
- package/assets/brand-tokens.json +45 -0
- package/assets/wl-gate-logo-dark.svg +38 -0
- package/assets/wl-gate-logo.svg +37 -0
- package/assets/wl-mark.svg +11 -0
- package/bin/wl-skills-gate.js +180 -8
- package/docs/01-quick-start.md +2 -2
- package/docs/02-config.md +7 -3
- package/docs/05-adapters.md +12 -2
- package/docs/06-gitlab.md +7 -5
- package/docs/09-selftest-coverage.md +4 -2
- package/docs/10-enforcement.md +2 -2
- package/docs/13-quality-cost-and-isolation.md +6 -6
- package/docs/14-low-token-execution.md +8 -8
- package/docs/15-java-report-triage.md +1 -1
- package/docs/16-project-ci-integration.md +64 -0
- package/docs/17-onboarding.md +75 -0
- package/docs/18-ci-source.md +42 -0
- package/docs/19-nine-dimension-review.md +105 -0
- package/docs/README.md +14 -8
- package/fixtures/onboarding/README.md +3 -0
- package/fixtures/onboarding/quality-audit-profile.xml +51 -0
- package/fixtures/onboarding/quality-unit-profile.xml +101 -0
- package/lib/adapters/cmd-json.js +12 -10
- package/lib/adapters/java-xml.js +3 -2
- package/lib/adapters/junit.js +78 -13
- package/lib/adapters/raw-json.js +4 -3
- package/lib/adapters/sarif.js +3 -3
- package/lib/automation.js +247 -0
- package/lib/ci-discovery.js +227 -0
- package/lib/ci-source.js +203 -0
- package/lib/config.js +7 -4
- package/lib/control-deployment.js +44 -0
- package/lib/control-service.js +244 -0
- package/lib/control-store.js +120 -0
- package/lib/deployment-delivery.js +89 -0
- package/lib/deployment-queue.js +101 -0
- package/lib/deployment.js +217 -0
- package/lib/doctor.js +110 -0
- package/lib/evidence.js +59 -7
- package/lib/fix.js +61 -9
- package/lib/governance-notifications.js +45 -0
- package/lib/governance.js +521 -0
- package/lib/identity.js +49 -0
- package/lib/lifecycle-source.js +161 -0
- package/lib/onboard-complete.js +333 -0
- package/lib/onboard-config.js +556 -0
- package/lib/onboard-environment.js +37 -0
- package/lib/onboard-legacy.js +43 -0
- package/lib/onboard-lifecycle.js +117 -0
- package/lib/onboard-registry.js +93 -0
- package/lib/onboard.js +118 -0
- package/lib/promote.js +17 -5
- package/lib/release-set.js +138 -0
- package/lib/report-input.js +22 -8
- package/lib/report-producers.js +37 -19
- package/lib/report-selection.js +136 -0
- package/lib/review-additions.js +159 -0
- package/lib/review-auto.js +75 -0
- package/lib/review-ci.js +119 -0
- package/lib/review-collect.js +146 -0
- package/lib/review-facts.js +160 -0
- package/lib/review-live.js +30 -0
- package/lib/review-publication.js +85 -0
- package/lib/review-publish.js +191 -0
- package/lib/review.js +376 -0
- package/lib/run.js +28 -5
- package/lib/yaml-lite.js +5 -0
- package/package.json +6 -4
- package/schemas/quality-summary.schema.json +22 -0
- package/scripts/lib-tests/automation.test.mjs +126 -0
- package/scripts/lib-tests/ci-discovery.test.mjs +123 -0
- package/scripts/lib-tests/ci-source.test.mjs +153 -0
- package/scripts/lib-tests/control-review.test.mjs +110 -0
- package/scripts/lib-tests/control-service.test.mjs +88 -0
- package/scripts/lib-tests/control-store.test.mjs +77 -0
- package/scripts/lib-tests/deployment-http.test.mjs +66 -0
- package/scripts/lib-tests/deployment.test.mjs +250 -0
- package/scripts/lib-tests/doctor.test.mjs +106 -0
- package/scripts/lib-tests/fix-state.test.mjs +55 -0
- package/scripts/lib-tests/governance-lifecycle.test.mjs +131 -0
- package/scripts/lib-tests/governance.test.mjs +240 -0
- package/scripts/lib-tests/java-unit-wrapper.test.mjs +107 -0
- package/scripts/lib-tests/junit-evidence.test.mjs +214 -0
- package/scripts/lib-tests/lifecycle-source.test.mjs +135 -0
- package/scripts/lib-tests/onboard-complete.test.mjs +324 -0
- package/scripts/lib-tests/onboard-registry.test.mjs +51 -0
- package/scripts/lib-tests/onboard-review-facts.test.mjs +89 -0
- package/scripts/lib-tests/onboard.test.mjs +180 -0
- package/scripts/lib-tests/review-additions.test.mjs +98 -0
- package/scripts/lib-tests/review-auto.test.mjs +94 -0
- package/scripts/lib-tests/review-ci.test.mjs +72 -0
- package/scripts/lib-tests/review-collect.test.mjs +61 -0
- package/scripts/lib-tests/review-facts.test.mjs +44 -0
- package/scripts/lib-tests/review-publication.test.mjs +47 -0
- package/scripts/lib-tests/review-publish.test.mjs +89 -0
- package/scripts/lib-tests/review.test.mjs +212 -0
- package/scripts/lib-tests/yaml-lite.test.mjs +21 -0
- package/scripts/run-integration.mjs +49 -7
- package/scripts/test-support/control-review-fixture.mjs +57 -0
- package/scripts/test-support/review-collect-fixture.mjs +47 -0
- package/templates/ci/Jenkinsfile +58 -0
- package/templates/ci/Jenkinsfile.attest +32 -0
- package/templates/ci/Jenkinsfile.automation +20 -0
- package/templates/ci/Jenkinsfile.deployment +78 -0
- package/templates/ci/Jenkinsfile.release-sign +26 -0
- package/templates/ci/Jenkinsfile.review-sign +30 -0
- package/templates/ci/central-review.sh +10 -0
- package/templates/ci/controlled-deployment-http.mjs +72 -0
- package/templates/ci/create-deployment-facts.mjs +7 -0
- package/templates/ci/deployment-http.json +14 -0
- package/templates/ci/gitlab-backend.yml +40 -0
- package/templates/ci/gitlab-frontend.yml +32 -0
- package/templates/ci/produce-review-facts.mjs +15 -0
- package/templates/ci/publish-reviews.mjs +5 -0
- package/templates/ci/sign-collected-release.mjs +7 -0
- package/templates/ci/wl-quality-automation.service +18 -0
- package/templates/ci/wl-quality-control.service +18 -0
- package/templates/onboarding/automation/ide-tasks.json +31 -0
- package/templates/onboarding/automation/project-actions.mjs +266 -0
- package/templates/onboarding/backend/java-unit.mjs +84 -0
- package/templates/onboarding/backend/java-unit.plan.json +15 -0
- package/templates/onboarding/backend/policy.yml +63 -0
- package/templates/onboarding/backend/quality-tools.package.json +9 -0
- package/templates/onboarding/backend/run.mjs +10 -0
- package/templates/onboarding/frontend/policy.yml +40 -0
- package/templates/onboarding/legacy/backend-commit-msg.sh +21 -0
- package/templates/onboarding/legacy/frontend-common-core-postinstall.mjs +52 -0
- package/templates/onboarding/legacy/frontend-enforce-pnpm.mjs +9 -0
- package/templates/onboarding/legacy/frontend-pre-commit.sh +15 -0
- package/templates/onboarding/legacy/frontend-pre-push.sh +16 -0
- package/templates/platform/README.md +33 -0
- package/templates/platform/action.example.json +15 -0
- package/templates/platform/automation-config.json +66 -0
- package/templates/platform/ci-source.backend.json +40 -0
- package/templates/platform/ci-source.frontend.json +42 -0
- package/templates/platform/ci-source.gitlab.json +18 -0
- package/templates/platform/ci-source.jenkins.json +31 -0
- package/templates/platform/control-config.json +48 -0
- package/templates/platform/deployment-config.json +92 -0
- package/templates/platform/event.example.json +17 -0
- package/templates/platform/expectations.example.json +16 -0
- package/templates/platform/governance-config.json +106 -0
- package/templates/platform/lifecycle-event.example.json +29 -0
- package/templates/platform/review-ci.backend.json +6 -0
- package/templates/platform/review-ci.frontend.json +6 -0
- package/templates/platform/review-collector.backend.json +59 -0
- package/templates/platform/review-collector.frontend.json +67 -0
- package/templates/platform/review-policy.backend.json +72 -0
- package/templates/platform/review-policy.frontend.json +71 -0
- package/templates/platform/review-publish-config.json +45 -0
- package/templates/quality/java-unit.plan.json +13 -0
- package/templates/quality/review-evidence.plan.json +11 -0
- package/templates/quality/review-input.example.json +25 -0
- package/templates/quality/review-policy.json +15 -0
- package/templates/quality/rules.lock.json +1 -1
- package/templates/scripts-quality/java-unit.mjs +83 -0
package/docs/01-quick-start.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 01 快速开始
|
|
2
2
|
|
|
3
|
-
对应 3.1/4.1、A1/A3。需要 Node ≥
|
|
3
|
+
对应 3.1/4.1、A1/A3。需要 Node ≥22.12,业务检查器与项目依赖需另行准备。
|
|
4
4
|
|
|
5
5
|
## 包仓库自测
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@ node bin/wl-skills-gate.js self-test
|
|
|
17
17
|
|
|
18
18
|
```bash
|
|
19
19
|
# 取得书面授权后,从公共 npm registry 安装固定版本。
|
|
20
|
-
pnpm add -D --save-exact @agile-team/wl-skills-gate@0.
|
|
20
|
+
pnpm add -D --save-exact @agile-team/wl-skills-gate@0.7.0
|
|
21
21
|
mkdir -p quality
|
|
22
22
|
# 从安装包 templates/quality 取模板,按真实检查器和工具版本修改。
|
|
23
23
|
pnpm exec wl-skills-gate run --profile standard
|
package/docs/02-config.md
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
对应 3.3/3.4/3.6、A1。项目 quality/ 支持 policy.yml/.yaml/.json、waivers.yml/.yaml/.json、baseline.json、rules.lock.json。
|
|
4
4
|
|
|
5
|
-
0.
|
|
5
|
+
0.7.0 源码修订(实际 registry 发布另验):`cmd-json.format` 可选 wl-kit/wl-ui/wl-bd,`captureStdout: true` 必须同时声明 file;`java-xml` 必填 format=checkstyle/pmd/p3c/spotbugs 与 file。java-xml 与 junit 可声明共享 producer,同组必须有相同 tool/command/timeoutMs,在本轮只生产一次;不允许将两个适配器混为同一组。见 [Java 静态片段](../templates/quality/java-static-checks.yml)、[适配器契约](05-adapters.md)与 [14 执行约束](14-low-token-execution.md)。
|
|
6
|
+
|
|
7
|
+
JUnit 单报告保留 file;多报告使用与 file 互斥的 files 明确路径数组,并必填 reportDirs(各报告直接父目录的完整集合)。requiredSuites 精确匹配 testsuite.name,requiredTests 使用 classname#name;目录全部 XML 必须与 files 一致,不使用 glob 或动态“实际清单自动批准”。全过程及签发核验真实 testcase/计数/必测、原始摘要、SHA/eventId/sourceDigest;终轮报告被改也 invalid。示例与 Java 单元计划见 [16 正式操作入口](16-project-ci-integration.md)。
|
|
8
|
+
|
|
9
|
+
仅 java-xml 允许 `sourceRoots`,须为无重复、实际存在且没有符号链接的项目内相对目录数组;SpotBugs 未配置时只兼容 `src/main/java`,不搜索整个仓库。详见 [Java 分级与定位](15-java-report-triage.md)。风险分级和测试拆分见 [13 质量成本与隔离](13-quality-cost-and-isolation.md)。`enforceWarnings: false` 只控制 Gate 警告,不改变原生 Maven 插件的失败行为。
|
|
6
10
|
|
|
7
11
|
policy 必需。没有 baseline/waivers 表示没有登记任何基线/例外,摘要为 `sha256("absent")`;存在的文件损坏时失败关闭。受控 `--sha`、release 和正式签发时,有文件就必须提供批准的 `--expect-baseline-hash` / `--expect-waivers-hash`,空文件也一样;本地非受控诊断可不传。
|
|
8
12
|
|
|
@@ -39,7 +43,7 @@ rules.lock.json 示例:
|
|
|
39
43
|
```json
|
|
40
44
|
{
|
|
41
45
|
"lockVersion": 1,
|
|
42
|
-
"wl-skills-gate": "0.
|
|
46
|
+
"wl-skills-gate": "0.7.0",
|
|
43
47
|
"tools": {
|
|
44
48
|
"TS-TYPECHECK": "<实际版本命令完整输出>",
|
|
45
49
|
"FE-ESLINT": "<实际版本命令完整输出>"
|
|
@@ -75,7 +79,7 @@ tools 以 check id 为键。执行 versionCommand 时使用其真实输出,随
|
|
|
75
79
|
|
|
76
80
|
## 配置格式与修复白名单
|
|
77
81
|
|
|
78
|
-
yaml-lite
|
|
82
|
+
yaml-lite 支持简单键值、一级列表、流式数组、布尔/null、裸十进制安全整数、引号与注释;timeoutMs 等整数可直接写 600000。引号数字仍是字符串,日期/普通参数不转数值,超出安全整数范围拒绝。检查内 files/reportDirs 等用行内数组;复杂或嵌套 fixer 结构用 policy.json,见 04。重复键和不支持语法失败关闭。未使用的工具包不强制安装或登记。
|
|
79
83
|
|
|
80
84
|
受控 --sha / release 的全部必需检查还须实际查询工具版本并匹配 rules.lock.tools;仅 JSON 自报版本不能签发正式证明。ESLint/typecheck 可查询对应 bin --version,其他 adapter 需登记受控 versionCommand。
|
|
81
85
|
|
package/docs/05-adapters.md
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
| typecheck | 实际 vue-tsc/tsc;缺失/超时 invalid,类型失败不可基线化/豁免;版本命令与 bin 对应 |
|
|
9
9
|
| cmd-json | 统一 findings,或 format=wl-kit/wl-ui/wl-bd 原生完整报告;captureStdout+file 支持大 JSON 文件描述符接收;默认 exit=0,显式接受 1 必须有问题证据 |
|
|
10
10
|
| raw-json | 本地 fixture/报告调试可读文件;受控 --sha/release 必须配置本次 command 产生新文件 |
|
|
11
|
-
| junit | 无 DTD
|
|
11
|
+
| junit | 无 DTD 的真实完整 XML;file 单份或 files+reportDirs 全集;requiredSuites/requiredTests 核验套件和用例;计数/testcase 一致,零用例/跳过/失败阻断;支持同轮共享 producer |
|
|
12
12
|
| sarif | SARIF 2.1.0,runs/results 完整、工具执行成功;默认风险依据 rule 配置或 warning,不静默降 info |
|
|
13
13
|
| java-xml | format=checkstyle/pmd/p3c/spotbugs;解析原 XML、保留原生身份;Gate单源表分级,底线error、上下文复核warning;sourceRoots精确映射多模块main/test;生产命令须exit0,分析错误/缺类/零类/坏报告/定位失效invalid;可显式同producer共用一次本轮生产 |
|
|
14
14
|
|
|
@@ -22,12 +22,22 @@ Java context 是稳定 JSON 字符串,含 producer、真实报告引擎和自
|
|
|
22
22
|
|
|
23
23
|
## 新鲜度与失败关闭
|
|
24
24
|
|
|
25
|
-
受控检查的文件报告必须由 adapter 的 command
|
|
25
|
+
受控检查的文件报告必须由 adapter 的 command 在本次生成;清理前先预检全部声明范围,禁止把已跟踪源码/本轮源码快照或不安全路径当输出删除。cmd-json 默认不把 exit 1 当成功;确实表示发现问题时在批准策略登记 okExitCodes=[0,1],报告必须反映问题。声明成功但没有有效测试、异常退出却空报告、缺文件、损坏、超时均拒绝。
|
|
26
26
|
|
|
27
27
|
报告生产命令收到 WL_GATE_EVENT_ID、WL_GATE_COMMIT_SHA,可写入自己的来源字段。可信来源还依赖受控执行器与独立平台查询;JSON 中的 toolVersion、passed、completed 字样不能独自证明执行发生。
|
|
28
28
|
|
|
29
29
|
所有档位都检测执行前后源码/HEAD 变化;检查中修改源码返回 invalid。报告和构建输出应放在声明的生成目录,检查命令不能带 --fix。
|
|
30
30
|
|
|
31
|
+
## JUnit 全集与同轮生产(0.7.0)
|
|
32
|
+
|
|
33
|
+
file 与 files 互斥;使用 files 时必填 reportDirs,精确等于每份报告直接父目录的集合。生产前清理这些目录中旧 XML;新一轮目录里的全部 XML 必须与 files 全集完全相同。缺/未登记报告、子目录、symlink、路径别名、glob、坏 UTF-8/结构/计数和跨报告重复 classname#name 返回 invalid。参数化用例须保留完整不同名称;不能手写汇总计数替代 XML 中 testcase。
|
|
34
|
+
|
|
35
|
+
requiredSuites 精确 testsuite.name;requiredTests 为 classname#name,必须真实成功。每份报告/套件的零用例、skipped、failure/error 均形成不可基线化阻断。生产命令 exit 1 只有存在真实 failure/error 时才可消费;仅 skipped/缺必测不能解释异常退出。更高退出码、超时或缺新报告为 invalid。
|
|
36
|
+
|
|
37
|
+
JUnit producer 与 java-xml producer 分组独立,同组 tool/command/timeoutMs 一致,一轮执行一次。每份原始字节只读解析并核验 SHA-256,绑定 eventId/commitSha/sourceDigest;消费后到终轮的覆盖/删除/修改也拒绝。签发/部署/治理摄入对完整通过证据独立复核,不只相信 passed 字段。跨作业复制文件不能充当本轮生产。
|
|
38
|
+
|
|
39
|
+
[Java 单元生产器](../templates/scripts-quality/java-unit.mjs)和[批准 plan](../templates/quality/java-unit.plan.json)负责依赖准备及真实模块单元执行。它对任何 Maven 非零保守返回 2/invalid,保留原始阶段日志;JUnit 适配器自身能识别符合契约的真实失败为 blocked,两者不能混为一种退出口径。
|
|
40
|
+
|
|
31
41
|
## Kit/UI/BD/Test 接入
|
|
32
42
|
|
|
33
43
|
优先调用其确定性只读 CLI,将真实 findings 转入统一契约。现有 AI Skill 不一定具备确定性 CLI;没有 CLI/JSON 输出的能力需实现适配,涉及业务判断的能力保留人工 Review,不写成自动化已完成。
|
package/docs/06-gitlab.md
CHANGED
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
```yaml
|
|
21
21
|
wl-quality-check:
|
|
22
22
|
stage: test
|
|
23
|
-
image: node:
|
|
23
|
+
image: node:22
|
|
24
24
|
script:
|
|
25
25
|
- corepack enable
|
|
26
|
-
- pnpm install --frozen-lockfile
|
|
26
|
+
- pnpm install --frozen-lockfile --prod=false
|
|
27
27
|
- >-
|
|
28
|
-
|
|
28
|
+
pnpm exec wl-skills-gate run
|
|
29
29
|
--profile standard --sha "$CI_COMMIT_SHA"
|
|
30
30
|
--expect-policy-hash "$WL_APPROVED_POLICY_HASH"
|
|
31
31
|
--expect-rules-hash "$WL_APPROVED_RULES_HASH"
|
|
@@ -37,7 +37,7 @@ wl-quality-check:
|
|
|
37
37
|
# junit: quality-reports/junit/*.xml # 真实测试生产者已接入后启用
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
这个 job
|
|
40
|
+
这个 job 假定项目已固定安装 Gate 0.9.0 并提交锁文件,不持有签发/晋级/部署/通知凭据。`node:22` 仅为版本系列示意,正式接线固定实际 Node 22.12+ 镜像版本/摘要与项目 pnpm 版本。Kit/UI/BD 当前要求 Node ≥22,不能沿用组合检查的 Node 20 示例。后端使用受控 Node+项目 JDK+Maven 镜像,先真实接线 wl-quality profile/检查器;若 Gate 由中央镜像提供,使用其固定 CLI,不与项目本地解析路径混用。详细接入见 [16 项目与 CI](16-project-ci-integration.md)。
|
|
41
41
|
|
|
42
42
|
上述采用全量 standard,不依赖 MR。若增加增量,分别处理 push/MR/候选/定时场景、首次 push 全零 SHA 与浅克隆缺历史,head 与 checkout 相同。MR 专属变量只在实际 MR pipeline 使用。[GitLab 变量说明](https://docs.gitlab.com/ci/variables/predefined_variables/#predefined-variables-for-merge-request-pipelines)。
|
|
43
43
|
|
|
@@ -57,7 +57,7 @@ wl-skills-gate promote --source "$SOURCE_BRANCH" --target "$TARGET_BRANCH" \
|
|
|
57
57
|
## 独立 Review、签发和更新
|
|
58
58
|
|
|
59
59
|
1. 平台保存候选 SHA、源/目标 HEAD 与作业 ID;授权非作者 Reviewer 检查候选,逐项处理阻断问题。
|
|
60
|
-
2.
|
|
60
|
+
2. 自动生成九维草稿,补齐适用证据,非作者逐维确认;独立身份服务签发绑定正文/证据/候选的授权receipt。Review作业用固定身份公钥/issuer校验后review-sign,使用与身份服务分离的Review密钥;见[19 九维Review](19-nine-dimension-review.md)。
|
|
61
61
|
3. 签发作业权威查询检查来源和成功状态,再 attest:standard 档、固定期望、源 job ID,使用 --promotion-record 绑定该候选记录。
|
|
62
62
|
4. 受控更新作业执行:
|
|
63
63
|
|
|
@@ -70,6 +70,8 @@ wl-skills-gate promote-apply signed-proof.json \
|
|
|
70
70
|
--expect-pipeline-id "$WL_VERIFIED_PIPELINE_ID" --expect-job-id "$WL_VERIFIED_JOB_ID" \
|
|
71
71
|
--expect-policy-hash "$WL_APPROVED_POLICY_HASH" --expect-rules-hash "$WL_APPROVED_RULES_HASH" \
|
|
72
72
|
--review review-record.json --review-public-key "$WL_REVIEW_PUBLIC_KEY" \
|
|
73
|
+
--review-evidence-root "$WL_REVIEW_EVIDENCE_ROOT" --expect-review-policy-hash "$WL_APPROVED_REVIEW_POLICY_HASH" \
|
|
74
|
+
--authorization-public-key "$WL_IDENTITY_PUBLIC_KEY" --expect-authorization-issuer "$WL_IDENTITY_ISSUER" \
|
|
73
75
|
--out controller-audit
|
|
74
76
|
```
|
|
75
77
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 09 自测与真实环境演练
|
|
2
2
|
|
|
3
|
-
对应 A6/E2
|
|
3
|
+
对应 A6/E2、第十六章。0.9.0对源码和独立tgz分别执行完整测试,包含自动接入、九维认证补证、CI发现与中断恢复、部署授权回流、台账与通知正反例;测试快照随包交付,不依赖兄弟仓库。具体数量与日志随固定产物的verification.json记录。固定命令:
|
|
4
4
|
|
|
5
5
|
```bash
|
|
6
6
|
npm test
|
|
@@ -8,7 +8,9 @@ npm test
|
|
|
8
8
|
node bin/wl-skills-gate.js self-test
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
0.
|
|
11
|
+
0.7.0 历史完整验证包含 198 项单元测试、29 个 fixture 场景和 17 个本地 Git/签名/制品集成场景;self-test 不包含全部单元/集成。新增覆盖多模块原始 JUnit、报告终轮防改、doctor/YAML、Java 包装器以及签名台账/投递正反用例。fixture 在临时目录执行,不污染业务源码。
|
|
12
|
+
|
|
13
|
+
另在独立 Java 8 双模块工程运行真实 JUnit/JaCoCo,验证缺报告、Maven 测试失败、必测场景遗漏及修复恢复;原始报告、执行次数和退出码单独归档。治理演练消费真实 Java 报告,平台身份与消息 HTTP 使用模拟,不代表真实群投递或业务复验完成。
|
|
12
14
|
|
|
13
15
|
新增反向验证覆盖:关键失败基线/豁免、严重程度合并、历史扩张、增量误关闭、自批例外、JUnit 截断/零用例/跳过/计数/必测、旧报告、非零退出空报告、假 SHA、脏代码/扫描漂移、部分暂存、实际版本、修复代码漂移/任意命令/失败回滚/复扫期间源码变化、伪造签名/作业/时间/环境/档位、替换制品、Review 缺失/伪造/自审、竞争候选、项目 Hook 不进入特权控制器、控制器审计前置和异常清理。
|
|
14
16
|
|
package/docs/10-enforcement.md
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
|
|
22
22
|
run 的 unsigned 结果不允许部署。Ed25519 私钥仅在固定版本的受控签发作业,公钥/issuer/期望作业 ID 固定在更新/发布控制配置。Review 使用单独 Reviewer 授权及签名密钥,非作者、候选绑定。
|
|
23
23
|
|
|
24
|
-
签发前的权威查询确认真实项目、source SHA、job/pipeline、成功状态、模板/Runner、approved policy/rules/baseline/waivers
|
|
24
|
+
签发前的权威查询确认真实项目、source SHA、job/pipeline、成功状态、模板/Runner、approved policy/rules/baseline/waivers、真实工具与覆盖。包内 collect-ci 已提供固定 GitLab/Jenkins 只读来源查询,详见18;实际受控模板/权限/身份和中央作业仍须配置与实测。不能把“报告来自某 CI job”或“字段填了 issuer”直接当来源可信。
|
|
25
25
|
|
|
26
26
|
同一摘要需三处一致:批准登记表 → 实际检查 → 签名验证。批准摘要来自审批后的版本,不在候选中现算现批。署名签发只证明可信主体签了这些内容,该主体必须执行来源核验,不能提供任意上传报告的盲签接口。
|
|
27
27
|
|
|
@@ -43,4 +43,4 @@ promote-apply 在新 bare 仓库运行,不继承业务仓库的 Hook/配置;
|
|
|
43
43
|
|
|
44
44
|
0.5.1 将全部 Git 跟踪内容纳入 sourceDigest/脏状态,报告排除项不能藏住 tracked 源码;报告目录不允许覆盖项目根、跟踪文件或经项目内符号链接写出。Git submodule、特殊文件等尚无独立来源绑定时失败关闭,需另行接线验收。
|
|
45
45
|
|
|
46
|
-
proof 默认有效期 1440 分钟;平台另须提供撤销、当前批准版本核对和可信缓存过期策略。签名离线有效不能独自证明当前未撤销。旧版本恢复不能靠修改 createdAt
|
|
46
|
+
proof 默认有效期 1440 分钟;平台另须提供撤销、当前批准版本核对和可信缓存过期策略。签名离线有效不能独自证明当前未撤销。旧版本恢复不能靠修改 createdAt 或延长时效复用过期证明,应重新取得批准证据或由独立紧急恢复授权链处理;当前包通过固定组合的 deployment plan/run-authorized recover 动作,另行认证授权并核对实际环境状态;见包内 Jenkinsfile.deployment。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 13 质量分级、执行成本与测试隔离
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
适用源码:Gate 0.7.0、BD 0.41.0;2026-10-11 原稿,2026-10-12/13 补充执行与证据能力,实际 registry 发布另验。11/12 手册及既有 test-qa 报告保留为当时记录。本轮只修改共享包与体系文档,未向业务项目安装或升级资产。正式逐步接入统一见 [16 操作入口](16-project-ci-integration.md)。
|
|
4
4
|
|
|
5
5
|
## 目标和执行边界
|
|
6
6
|
|
|
@@ -40,11 +40,11 @@ Gate 复用 `cmd-json`,增加 `format: wl-kit/wl-ui/wl-bd`。读取实际 issu
|
|
|
40
40
|
tool: cmd-json
|
|
41
41
|
format: wl-bd
|
|
42
42
|
profiles: [standard, release]
|
|
43
|
-
command: node_modules
|
|
43
|
+
command: node quality-tools/node_modules/@agile-team/wl-skills-bd/bin/wl-skills-bd.js validate --target . --json
|
|
44
44
|
captureStdout: true
|
|
45
45
|
file: quality-reports/native/bd.json
|
|
46
46
|
okExitCodes: [0, 1]
|
|
47
|
-
versionCommand: node_modules
|
|
47
|
+
versionCommand: node quality-tools/node_modules/@agile-team/wl-skills-bd/bin/wl-skills-bd.js --version
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
Kit 使用 `wl-skills validate --json`,UI 使用 `wl-ui scan --project . --target src --output json --fail-on-error`,各自登记 format、完整目标、真实版本及项目适用性。CLI 路径按实际安装包确认,未使用的兄弟包无需安装。
|
|
@@ -79,13 +79,13 @@ Maven 模板由独立的 `@agile-team/wl-skills-bd` 包维护,位置为其 `fi
|
|
|
79
79
|
|
|
80
80
|
Checkstyle 使用 format=checkstyle、目标 checkstyle:checkstyle、文件 target/checkstyle-result.xml;SpotBugs 使用 format=spotbugs、目标 spotbugs:spotbugs、文件 target/spotbugsXml.xml。子模块使用实际 `-pl`/`-am` 和 `<module>/target/...` 路径,逐个验收,不能只拿根模块的一份报告代表全仓。
|
|
81
81
|
|
|
82
|
-
SpotBugs的包内sourcepath
|
|
82
|
+
SpotBugs 的包内 sourcepath 须配合同一检查的真实 sourceRoots,例如 wl-produce 的 PL service 是 `wl-produce-pl/wl-produce-pl-service/src/main/java`,不是简写 pl/src。数组只声明实际存在的项目内相对目录,test 根存在才加入;不能绝对路径、`..`、符号链接或模糊全仓搜索。同名存在多处按报告所属模块/源集拆开,定位不唯一或不存在返回 invalid。默认仅 src/main/java,不推测模块前缀。P3C 用 format=p3c,PMD 6 引擎与 P3C 插件版本分开归档;与 PMD 7 不同调用/输出,防默认 target/pmd.xml 互相覆盖。Java finding 验证真实普通源文件,空 Checkstyle/PMD 仍不证明完整覆盖。
|
|
83
83
|
|
|
84
84
|
静态生产命令必须 exit 0;出现编译失败、分析异常或缺失依赖时返回 invalid,即使残留报告有 findings 也不放行。原报告与 policy、插件 POM/配置、源码摘要一起归档。`versionCommand: mvn -version` 只证明 Maven 版本;插件版本仍由受控 POM/配置和运行日志核验,不能称为逐一动态核实插件版本。
|
|
85
85
|
|
|
86
86
|
Checkstyle/PMD 的正常报告可能只列违规文件,空 findings 不表示所有源文件都已扫描。必须对账适用子模块、编译源码范围与实际日志,不能仅凭 XML 推断完整覆盖;SpotBugs 则核验实际分析类数与缺陷汇总,不接受零类空扫。插件配置排除、上游非底线豁免也须进入批准的适用表,不能绕过范围治理。
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
JUnit 已支持 files/reportDirs 的全部明确原始 XML、必需 suite/用例和同轮共享 producer;逐份解析真实 testcase,不用手填计数。缺/多报告、重复身份、坏结构/摘要、零用例与 skipped 均不能放行,签发独立核验;具体见 [05 适配契约](05-adapters.md)。单元模板依赖准备与测试模块分开,不对全部 -am 依赖模块启用 unit 后全局关闭零测试失败。独立集成环境、跨作业/双仓组合仍由平台接入,静态示例不等于完整 release policy。
|
|
89
89
|
|
|
90
90
|
## 测试选择与隔离
|
|
91
91
|
|
|
@@ -99,7 +99,7 @@ Checkstyle/PMD 的正常报告可能只列违规文件,空 findings 不表示
|
|
|
99
99
|
|
|
100
100
|
预警按 project + rule + fingerprint 关联问题台账,eventId 记录每次运行。群消息只推新增阻断、工具失效、复发、无人认领/逾期及复验结果;普通风格警告默认汇总成日报,避免每次扫描重复轰炸。消息包含等级、主备责任人、截止时间和认证的“查看证据/认领/申请复验”链接。
|
|
101
101
|
|
|
102
|
-
警告按项目批准时限治理;认领不等于修复,扫描消失仅进入待复验。核验目标 SHA
|
|
102
|
+
警告按项目批准时限治理;认领不等于修复,扫描消失仅进入待复验。核验目标 SHA、必测、部署/观察证据及非作者复核后关闭;增量扫描不能关闭未扫描范围中的问题。0.7.0 已提供签名平台 receipt、串行持久台账/outbox、动作与自然分钟 SLA/预期运行对账,dispatch 默认预览、不联网,显式 --send 支持飞书/企业微信群实际投递。平台 API/SSO、认证网页、群权限、长期存储/调度仍须实接;当前不自带应用卡片回调、@个人或工作日历。见 [中央治理模板](../templates/platform/README.md)。本轮仅 mock/预览,没有真实发送。
|
|
103
103
|
|
|
104
104
|
记录各档 P50/P95 用时、误报/争议率、重复告警、每次人工维护时间及逃逸缺陷;先积累样板数据,再由团队批准预算和升档条件。慢检查移到 CI 或夜间治理,不靠跳过必需检查提速。团队日常只保留现有开发命令和一条质量入口,报告转换、分类、规则升级和台账路由由平台维护。基线需审批,禁止首次接入时自动把全部错误写入基线。
|
|
105
105
|
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# 14 低 token 执行与按需阅读
|
|
2
2
|
|
|
3
|
-
2026-10-12
|
|
3
|
+
2026-10-12 原稿,2026-10-13 按 Gate 0.7.0 源码更新;实际 registry 发布/消费另验,使用条件见 [LICENSE](../LICENSE)。本文与团队执行文档 V3.4 的附录 E/G 配套;正式接入步骤见 [16 操作入口](16-project-ci-integration.md),外部体系文件不属于本 npm 包。扫描与阅读分开:完整事实用于门禁,少量相关证据用于人工/AI 诊断。
|
|
4
4
|
|
|
5
5
|
## 三类成本分开核算
|
|
6
6
|
|
|
7
7
|
| 环节 | 是否需要大模型 | 实际成本 |
|
|
8
8
|
|---|---|---|
|
|
9
9
|
| ESLint、类型/编译、Kit/UI/BD 扫描、Java 静态分析、测试 | 不需要;当前内置执行链没有模型 API 调用 | CPU、内存、I/O、Runner 时间;测试还需环境隔离 |
|
|
10
|
-
| 报告转换、门禁、指纹关联、固定消息模板、SLA 定时对账 | 不需要 |
|
|
10
|
+
| 报告转换、门禁、指纹关联、固定消息模板、SLA 定时对账 | 不需要 | 共享确定性治理入口已实现;实际平台查询/身份/存储/渠道及调度待接线 |
|
|
11
11
|
| AI 读取报告、规则、源码,解释或修复 | 需要模型上下文 | 宿主输入/输出 token;缓存输入是否计费取决于实际服务 |
|
|
12
12
|
| 复杂业务判断、低置信度问题、Review | 按需要由人或 AI 辅助 | 相关上下文与人工时间,不能用 AI 判断替代原必需的独立 Review |
|
|
13
13
|
|
|
@@ -22,7 +22,7 @@ Gate 的 policy 可以执行项目自定义命令,平台须审查其是否引
|
|
|
22
22
|
| BD | 共用扫描上下文、Source Index 缓存、按规则读取;MCP 结果字节预算/短期游标;上下文文件/字节/估算 token 上限 | MCP 游标续读不重跑;存储有总量/时效上限。预算估算不等于真实计费 |
|
|
23
23
|
| Test | API/audit/report/用例生成的大结果默认紧凑,完整报文/用例保留工件 | TopN/摘要不等于统一字节硬上限;执行 API、E2E、性能测试有环境与 Runner 成本 |
|
|
24
24
|
| Design(可选) | 结构、引用、ID 与 Schema 的机械校验由 CLI 执行 | 设计语义与业务事实由人/AI 处理;不接入日常代码提交门禁,不因父目录存在而强制安装 |
|
|
25
|
-
| Gate | run
|
|
25
|
+
| Gate | run 精简输出;inspect 摘要/分页;Java/XML 与 JUnit 同轮共享生产;cost 离线汇总;确定性台账/预览/对账 | 不复用跨轮放行;没有新增报告索引/成本服务;平台 API/SSO 与实际渠道另验 |
|
|
26
26
|
|
|
27
27
|
确定性检查优先,AI 只读命中的少量规则和问题所在函数、调用方或契约。工具失效先读实际诊断并交平台负责人,不启动反复全仓问答。问题不需要 AI 就直接用 IDE、报告定位和常规开发流程处理。
|
|
28
28
|
|
|
@@ -60,7 +60,7 @@ inspect 返回原报告的 0=passed、1=blocked、2=invalid;参数/报告错
|
|
|
60
60
|
|
|
61
61
|
- pre-commit 只跑已验收 fast;原有 lint-staged 与 Gate 同范围 ESLint 不同时各跑一次。平台审查后在现有 dispatcher 中明确唯一生产者,保留原覆盖;不在 Hook 启动 AI、全量 Maven 或集成/E2E。
|
|
62
62
|
- pre-push standard 是当前默认模板。实际耗时过高可由平台将完整 standard 前移到强制 CI,保留本地已批准的快速反馈;只有服务端必需检查真正接通后才能减少本地重复项。
|
|
63
|
-
-
|
|
63
|
+
- 每个作业同一生产者、输入、配置只运行一次供多个下游消费。java-xml 和 junit 可分别用显式 producer 合并本轮命令,同组 tool/command/timeout 一致;不跨工具混组、不删 command 回读旧 XML,不把版本查询次数算编译次数。
|
|
64
64
|
- 展示翻页用既有 Gate 工件或 Kit/UI 的 resultCursor;不循环使用原生 offset/数字 cursor 重跑扫描获取下一页。源码、范围、规则/插件/依赖锁或环境变化须重新检查;内容/AST 缓存不能冒充上一版放行结果。
|
|
65
65
|
- release 保持全量和必测。签名绑定候选、策略、环境与制品;不同 SHA 或复验不能借节流跳过。相同 fingerprint 的新发生数、风险升高、复发、工具失效和 SLA 超时仍及时告警。
|
|
66
66
|
|
|
@@ -70,7 +70,7 @@ inspect 返回原报告的 0=passed、1=blocked、2=invalid;参数/报告错
|
|
|
70
70
|
|
|
71
71
|
预算按项目/语言/Runner 试点批准;超预算先定位重复执行、无关上下文、日志洪水与慢规则。AI 辅助预算耗尽转人工或缩小上下文,不绕过质量门;Runner 超时为失效,不当无问题。普通警告汇总;问题状态变化和对账由脚本处理,不让 AI 每次重新总结所有历史告警。
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
当前共享验证覆盖输出预算、原生只读游标、Java/JUnit 同轮生产、成本汇总与治理/消息协议 mock;真实大项目性能、团队模型用量、跨作业传输以及 API/SSO/消息闭环待内网实测。不能由小夹具推导提交费用或全系统误报率。dispatch 默认仅预览,只有独立通知作业显式 --send 才联网,详见 [治理模板](../templates/platform/README.md)。
|
|
74
74
|
|
|
75
75
|
## Kit/UI 的原生阅读游标
|
|
76
76
|
|
|
@@ -80,11 +80,11 @@ Kit `wls_validate_page` 首次运行返回 `structuredContent.nextCursor`;下
|
|
|
80
80
|
|
|
81
81
|
阅读输出标记 displayOnly 和快照时间;改代码后的旧游标仍读历史事实,复验须重新扫描。旧 Kit offset、UI 数字 cursor/CLI 分页语义保持独立检查。Gate 现在拒绝 displayOnly、明确裁剪以及带未完成游标的原生/通用输入,防止阅读结果误作全量证据。原生字段由各自独立的 Kit/UI 包 `docs/result-reading.md` 维护,不包含在 Gate 包中,也不要求安装未使用的兄弟包。
|
|
82
82
|
|
|
83
|
-
## Java
|
|
83
|
+
## Java 静态与单元分别同轮生产一次
|
|
84
84
|
|
|
85
|
-
平台把 [Java
|
|
85
|
+
平台把 [Java 静态片段](../templates/quality/java-static-checks.yml)合并到批准 policy。Checkstyle/PMD/SpotBugs 配置相同 producer、组合 command/timeoutMs,各自保持不同 XML/风险规则;JUnit 用独立 producer 绑定 [单元计划/生产器](../templates/scripts-quality/java-unit.mjs)。同组 tool/命令/超时冲突、缺 command、重复路径在执行前拒绝。files/reportDirs 与 suite/必测详见 [05 适配器](05-adapters.md)。
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
本轮先预检全部输出范围,禁止清理源码/跟踪文件,再删除组内旧 XML 并执行一次命令。Java 静态要求 exit 0;JUnit 只有完整真实 failure/error 才可消费 exit 1。缺/未登记 XML、坏编码/结构/摘要、零用例、必测未成功、超时及不安全路径不能放行;异常不会为每个消费者重启生产。production/productions 记录 eventId/commitSha/sourceDigest、命令/报告摘要、耗时/次数。消费前及终轮核验内容,签发独立复核完整通过证据;下一轮重新生产,不缓存放行。
|
|
88
88
|
|
|
89
89
|
该能力收敛 Maven **生产命令调用次数**,不承诺每个插件内部不会重复进入编译生命周期。多模块可以对受控整仓组合命令登记全部实际子模块 XML,也可以按模块分组;均须核验子模块/源码范围与排除规则。不要用根 POM 或三份 XML 代替测试、业务必测和完整 release。跨 CI 作业传输/复用尚需平台来源与 SHA 验证,不由 producer 字段授权。
|
|
90
90
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 15 Java 原生报告身份、定位与复核
|
|
2
2
|
|
|
3
|
-
适用 Gate 0.
|
|
3
|
+
适用 Gate 0.7.0;业务项目不会自动安装或升级。BD 提供团队约束和安全修复建议,扫描器负责引擎执行与原 XML;组织风险、基线和门禁分类只由 Gate [java-risk-policy.js](../lib/java-risk-policy.js) 维护。业务项目无需复制该表,BD 单包不依赖 Gate 运行时。
|
|
4
4
|
|
|
5
5
|
## 来源与版本
|
|
6
6
|
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
# 16 项目、流水线与治理接入入口
|
|
2
|
+
|
|
3
|
+
本页为包内导航。团队接入步骤统一维护在 **V3 接入操作手册**,本页不复制另一套操作顺序。包使用条件沿用 [LICENSE](../LICENSE)。
|
|
4
|
+
|
|
5
|
+
## 按读者使用文档
|
|
6
|
+
|
|
7
|
+
| 文档 | 职责 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 《工程化与代码质量管控体系(V3)》 | 目标、九个质量维度与团队统一要求 |
|
|
10
|
+
| 《工程化与代码质量管控体系-落地执行(V3)》 | 主责、阻断标准、SLA、例外、监督与关闭 |
|
|
11
|
+
| 《工程化与代码质量管控体系-接入操作手册(V3)》 | 七步操作与全部必要附录;含前后端、运维/米传汇智、杨晨誉飞书、九维Review与修前后授权记录;单文档导出 |
|
|
12
|
+
|
|
13
|
+
操作人员从独立操作手册开始,不必先通读客户宣贯或内部制度。团队文档由受控归档随交付包提供。npm 包不包含工作区 `规范/`;包外使用者从团队受控文档归档取得这三份文件,记录相同修订与批准版本。不要把工作区路径当作已上线的认证问题或证据服务。
|
|
14
|
+
|
|
15
|
+
## 执行入口与闭环责任
|
|
16
|
+
|
|
17
|
+
项目钩子与 CI 自动触发是主要执行入口;开发者不额外输入质量检查命令。确认后的机械修复与反馈由包内生成的项目动作调用同包fix引擎,业务/安全判断保留独立 Review。完整闭环还有已接项目准入与治理监督:
|
|
18
|
+
|
|
19
|
+
| 层 | 完成条件 |
|
|
20
|
+
|---|---|
|
|
21
|
+
| 项目 | 固定执行器/锁/受管资产,正确根目录,统一命令,轻量 Hook,检查不改源码 |
|
|
22
|
+
| 流水线 | 对真实 SHA 执行批准范围、实际测试与构建,保留完整原生报告;blocked/invalid 均不晋级 |
|
|
23
|
+
| 统一质量服务 | 共享分支保护、批准策略、真实候选、独立 Review/签发/制品验证;删 Hook/job 也不能绕过 |
|
|
24
|
+
| 治理 | 可信事件、幂等主台账、主备/复核、认证跳转、可靠待发箱、SLA/对账、独立关闭 |
|
|
25
|
+
|
|
26
|
+
“共享实现已验证”“业务项目已接入”“已接项目准入已验收”“业务问题已关闭”分别登记。模拟和隔离验证不能代替真实接线证据。本轮只完善共享资产,业务项目/test-qa 不改动,不发送真实消息。
|
|
27
|
+
|
|
28
|
+
## 后端检查的准确定位
|
|
29
|
+
|
|
30
|
+
需要的 CodeCC 相关精选检查已纳入 BD Maven 规则/复核指引与 Gate Java 风险分级,属于可进入正式链的检测能力。Gate 保留引擎身份、成员、原生等级与定位,确定缺陷阻断、待上下文判断风险留 warning。详见 [15 Java 风险](15-java-report-triage.md)。
|
|
31
|
+
|
|
32
|
+
原始 code-scan-kit 是另一套确定性编排,本轮补其失败关闭、范围/新鲜度和报告契约。是否选为某维度生产者由批准适用表决定,不能把整套已集成能力概括为“仅辅助审计”。同一维度选一个正式生产者,不默认重复运行两套 PMD/Checkstyle/SpotBugs;CPD/CCN 无共享适配的部分单独批准消费方案。
|
|
33
|
+
|
|
34
|
+
BD 的 verify:quality-codecc 等属于源码包维护者夹具验证。业务项目执行自己的 POM、源码和真实测试。PMD 7 与 P3C/PMD 6 分开调用和保存输出。
|
|
35
|
+
|
|
36
|
+
## 本轮新增共享资产
|
|
37
|
+
|
|
38
|
+
| 资产 | 使用位置与边界 |
|
|
39
|
+
|---|---|
|
|
40
|
+
| onboard complete | 包内统一识别、差异确认、固定安装、规则/POM/锁与Hook首扫;项目差异和远端验收独立留证 |
|
|
41
|
+
| 九维Review | 标准/发布检查后自动草稿,逐维证据、正文/摘要/候选和独立身份授权;正式晋级重验 |
|
|
42
|
+
| collect-ci与分类卡片 | 真实GitLab/Jenkins API与原始工件、构建/Review事实、同源卡片/待发箱,默认不真实发送 |
|
|
43
|
+
| doctor | 只读盘点前后端的依赖/资产/策略/POM 准备度,不执行项目测试或安装;CI/Jenkins 作业另由统一质量服务核验 |
|
|
44
|
+
| JUnit 多报告与共享 producer | 显式 files/reportDirs/requiredSuites/requiredTests,真实同轮生产,全量 XML 与 testcase 校验 |
|
|
45
|
+
| [Java 单元生产器](../templates/scripts-quality/java-unit.mjs) | 依批准 plan 准备依赖,再在真实测试模块运行 unit,不把跳测准备当测试 |
|
|
46
|
+
| [CI 模板](../templates/ci/) | 前后端 GitLab、Jenkins 接入资产;管理员合并真实 stages/rules/权限 |
|
|
47
|
+
| [治理模板](../templates/platform/) | 独立统一质量服务签名 receipt、幂等台账、动作校验、待发箱、预览/显式发送、自然分钟 SLA/预期运行对账 |
|
|
48
|
+
|
|
49
|
+
包内collect-ci提供固定GitLab/Jenkins只读查询;实际来源配置、SSO、认证网页、应用回调、工作日历和企业群权限由团队现有环境配置。receipt 签名要求统一质量服务先核验真实来源/身份。首期 SLA 为中央首次摄入起的自然分钟,源发生/接收延迟单独观测,不冒充完整工作日历。共享首期采用中央串行台账及写锁;多实例/数据库/外部系统需保留相同幂等与审计语义的适配。
|
|
50
|
+
|
|
51
|
+
共享版本与项目已装版本、registry 发布状态分别核验。组合工具当前至少 Node 22,正式固定符合项目要求的 Node 22.12+、pnpm/JDK/Maven、settings/toolchains 和镜像摘要。Gate 升级引入新 schema/能力时,同步审查 policy、工具锁、基线和批准摘要。
|
|
52
|
+
|
|
53
|
+
## 命令与配置参考
|
|
54
|
+
|
|
55
|
+
- [17 统一接入](17-onboarding.md)、[18 可信采集](18-ci-source.md)、[19 九维Review](19-nine-dimension-review.md):包内工程入口及权限契约。
|
|
56
|
+
- [02 配置和版本锁](02-config.md):批准策略、报告范围与必需检查。
|
|
57
|
+
- [05 工具适配](05-adapters.md):完整原生报告与新鲜度契约。
|
|
58
|
+
- [06 GitLab](06-gitlab.md):候选、独立 Review/签发、条件更新。
|
|
59
|
+
- [07 Jenkins](07-jenkins.md):检查/构建、独立签发、实际制品验证。
|
|
60
|
+
- [12 告警闭环](12-closed-loop-review.md):治理职责与统一质量服务边界。
|
|
61
|
+
- [14 低 token 执行](14-low-token-execution.md):唯一生产者、摘要阅读与成本。
|
|
62
|
+
- [质量服务配置与样例](../templates/platform/README.md):可信 receipt、事件/动作/对账及消息预览。
|
|
63
|
+
|
|
64
|
+
实际文件名以包目录为准。团队操作手册只呈现一次接入、自动检查、确认后脚本修复、复扫反馈、构建部署与关闭验收;资产、CLI/POM/CI参数和来源移入明细附录。Gate 的 templates/onboarding 已纳入固定 npm 包,统一入口为 onboard;工作区 quality-onboarding-examples 保留历史适配与兼容入口。已复制脚本仍须经升级计划审核同步。先验前后端各一个模块与一条真实告警,再扩面;正式准入从开始就拒绝确定缺陷、必测失败和证据失效。
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# 17 统一接入入口
|
|
2
|
+
|
|
3
|
+
`wl-gate` 与 `wl-skills-gate` 是同一个 Gate 包的两个命令名。接入脚本、Hook 调度器、IDE 操作和配置模板随 Gate 包一起交付;不再要求从文档目录挑脚本组装。本文介绍共享程序契约,团队按独立《接入操作手册》执行项目与远端验收。
|
|
4
|
+
|
|
5
|
+
## quality-tools 是什么
|
|
6
|
+
|
|
7
|
+
| 项目 | Gate 与规则包安装位置 | 业务编译 |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| PC Vue 管理端 | 根 `package.json` 固定 Gate、Kit、UI;复用既有 Husky、lint-staged、commitlint | 项目原有 pnpm 构建 |
|
|
10
|
+
| Java/Maven | `quality-tools/package.json` 固定 Gate、BD;脚本位于 `scripts/quality` | 原 Maven/Java 构建 |
|
|
11
|
+
|
|
12
|
+
**quality-tools 是 Java 仓库中的工具依赖目录。它不是独立产品、不是新的 npm 包,也不是另一个 Gate。** Java 依然使用 Maven;Node 负责调用 BD、聚合原生 Maven 报告、执行门禁、生成证据。
|
|
13
|
+
|
|
14
|
+
## 技术经理一次接入,开发者由 Hook 自动检查
|
|
15
|
+
|
|
16
|
+
完整接入使用 `--complete`,从已批准的固定 Gate 产物运行预览。下例 `$GATE_ROOT` 指该完整包目录,`$PROJECT_ROOT` 指实际 Git 仓库根;前后端使用同一入口。
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
node "$GATE_ROOT/bin/wl-skills-gate.js" onboard --root "$PROJECT_ROOT" --complete --registry "$APPROVED_NPM_REGISTRY"
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
接入界面可直接消费此 JSON,展示项目判定、每个文件的修改前后内容、依赖版本变化、Hook 激活、冲突与剩余验收。技术经理确认**这份具体计划**后,界面传回其实际摘要:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
node "$GATE_ROOT/bin/wl-skills-gate.js" onboard --root "$PROJECT_ROOT" --complete --registry "$APPROVED_NPM_REGISTRY" --apply --plan-hash "$ONBOARD_PLAN_HASH" --confirm
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
安装源必须是明确批准的 HTTPS URL;URL 不含凭据,认证由受控环境注入。完整接入计划依次展示固定 argv 安装(关闭生命周期脚本)、原生规则实际预览与同步、后端 POM 精确补丁、实际版本锁、doctor、真实 Git Hook 首扫、提交说明正反演练。两个入口命令只给接入负责人或接入界面使用。开发者正常提交/推送时,Hook 自动检查;IDE 提供“查看报告 / 预览机械修复 / 确认应用并复扫”操作,不要求输入质量命令。修复需要本人预览和确认。
|
|
29
|
+
|
|
30
|
+
- 默认计划将尚未配置的本地 `core.hooksPath` 指向生成的 `.githooks`;应用后生效。已有仓库内 Hook 路径直接复用,`.husky/_` 映射到用户 `.husky` 文件。既有Husky9转发器通过计划中独立、固定资产的激活阶段生成,不执行整个自定义prepare脚本;未知版本或路径明确阻断。
|
|
31
|
+
- 既有脚本与检查保留。发现旧 Hook 自动写源码或重复检查时列出迁移项;不会擅自删除或跳过。
|
|
32
|
+
- 依赖版本冲突默认拒写。批准固定工程依赖升级时,在预览和应用两次都添加 `--allow-dependency-updates`;原依赖类别保持。
|
|
33
|
+
- 计划、项目 HEAD、文件、模板、接入实现或选择变化后,旧摘要失效。冲突、路径越界、符号链接均拒写;写入有备份、独占锁与失败回滚。
|
|
34
|
+
- `--no-activate-hooks` 可显式只生成文件;此时不能登记自动检查已生效。预览与应用必须使用相同选项。
|
|
35
|
+
|
|
36
|
+
## 实际差异出现时,再确认同一入口
|
|
37
|
+
|
|
38
|
+
首次尚未安装固定包时,无法提前知道它们的真实规则差异。确认首份计划后只完成本地配置与固定清单安装,结果为 `native-approval-required`;接入界面重新调用同一预览,显示实际 Kit/UI/BD 差异和新摘要,负责人确认后继续。BD 刚同步而 POM 模板首次出现时,以 `pom-approval-required` 展示完整 before/after,再确认同一入口。后续不需要技术经理拼装多个 update、Maven、版本查询或 Hook 命令。
|
|
39
|
+
|
|
40
|
+
原生包、项目文件、预览输出或工具版本变化都会使旧确认失效。复杂/冲突 POM 不自动猜合并;内置 PL 补丁仅新增缺失 profile,保留已有 profile,将核对过的三个测试类加入新的 unit profile。真实 Maven 继承、插件、测试和覆盖率必须由后续首扫证明。
|
|
41
|
+
|
|
42
|
+
省略 `--complete` 仍保留兼容的“只配置文件”模式;该模式不会安装或执行项目检查,结果不得登记接入完成。
|
|
43
|
+
|
|
44
|
+
## 自动识别有适用范围
|
|
45
|
+
|
|
46
|
+
已声明 Kit 的 PC Vue 或 `wl-ui-produce` 可自动选 PC 配套;未接 Kit 的 Vue 必须由技术经理明确选择 `--kind frontend`,不能仅因使用 Vue 就套用 PC 规范。移动 H5、UniApp、小程序、React 等不套此配套。Maven 与 Vue 同根时需要明确项目边界和 `--kind`。
|
|
47
|
+
|
|
48
|
+
内置 Java 配套是 `wl-produce-pl/wl-produce-pl-service` 的真实接线起点,含已核对的三类六例;它不代表整个后端业务覆盖。对其他 Java 项目,入口识别为 Maven,但拒绝套用 PL 的模块、测试和私有 settings。维护者从 `templates/onboarding` 提供经审阅的同结构项目配套,使用 `--asset-root` 指向其目录;全部资产字节仍绑定进计划。这样统一的是执行入口和证据契约,项目特有的模块/规则/业务必测由实际负责人确认。
|
|
49
|
+
|
|
50
|
+
## 如何验收
|
|
51
|
+
|
|
52
|
+
| 结果 | 含义 | 下一步 |
|
|
53
|
+
|---|---|---|
|
|
54
|
+
| `configuration-blocked` / 退出 2 | 同名策略、脚本、版本或路径冲突 | 负责人合并,重新预览 |
|
|
55
|
+
| `configuration-planned` / 退出 0 | 只读计划生成成功 | 确认实际文件、固定 argv、差异与摘要 |
|
|
56
|
+
| `configuration-applied` | 仅配置模式完成 | 不能据此登记检查已运行 |
|
|
57
|
+
| `native/pom/lock-approval-required` | 当前阶段完成,新实际差异需要审阅 | 界面同入口显示新计划,再确认 |
|
|
58
|
+
| `onboarding-execution-blocked` / 退出 2 | 安装、资产、锁、Hook 或扫描失败 | 看具体阶段/日志,处理后重新预览 |
|
|
59
|
+
| `local-readiness-blocked` / 退出 2 | doctor、旧 Hook 静默修复/重复检查等仍有缺项 | 修复具体差异,不能跳过 |
|
|
60
|
+
| `local-validated-awaiting-remote-acceptance` | fresh 首扫通过、正常提交说明通过、违规说明被 Gate 正常拦截 | 开始远端强制检查/Review/通知/部署验收 |
|
|
61
|
+
|
|
62
|
+
执行回执位于 `quality-reports/onboarding/executions/<runId>.json`;每次一份,不覆盖历史。`execution.json` 提供最近一次索引。每阶段保存批准摘要、固定 argv、实际退出码、原生包/预览摘要、POM/锁前后摘要和实际报告事件/文件摘要;敏感日志脱敏。执行锁阻止并发安装和修改。
|
|
63
|
+
|
|
64
|
+
依赖缺失、安装失败、原生预览漂移、POM 冲突、版本查询异常、零/失效测试、旧绿报告、Hook 在扫描后改源码、负例因执行器损坏而失败,都不能算接入通过。首扫通过后也只登记 `localValidated=true`;`remoteValidated` 和 `businessClosureValidated` 保持 false。
|
|
65
|
+
|
|
66
|
+
GitLab/Jenkins 权限、可信中央模板、候选/独立 Review、构建/部署、飞书通知及独立复验仍须在真实环境验收;完整接入入口不会代替这些权限或向远端发布。它实际运行批准的 Maven/业务检查,可能发现问题并阻断,不会为了展示成功而降低规则。
|
|
67
|
+
|
|
68
|
+
## 维护单源
|
|
69
|
+
|
|
70
|
+
- 唯一公共入口:`lib/onboard.js`;唯一配置引擎:`lib/onboard-config.js`;完整任务编排:`lib/onboard-complete.js`。
|
|
71
|
+
- 包内交付源:`templates/onboarding/{frontend,backend,automation}`。`templates/scripts-quality/run.mjs` 与 schema 同包核验。
|
|
72
|
+
- 文档目录旧 `automation/configure.mjs` 仅兼容转发;不得再次复制实现。文档配套文件是审阅用样例副本,维护时与包内交付源核对摘要。
|
|
73
|
+
- 本模块测试覆盖真实 Git Hook 拒绝、前后端位置、旧 Hook 复用、幂等、漂移拒绝、完整包独立交付;不把隔离测试计为业务项目或远端验收。
|
|
74
|
+
|
|
75
|
+
只读配置采集禁止pnpm隐式版本下载,兼容pnpm10/11;安装强制项目固定版本,版本不符在预览中阻断,由运维提供批准运行环境。registry scope与锁文件实际下载源均核验;项目内vendor tarball按字节摘要绑定,不把锁文件deprecation里的文档URL当下载源。
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# 18 可信 CI 采集
|
|
2
|
+
|
|
3
|
+
当前自动入口:`automation`负责真实发现、采集、对账与通知;`review-ci`自动汇总同候选九维原件并登记;`control serve`提供OIDC认证确认页面。具体中央参数与部署模板见[中央执行接线](../templates/platform/README.md)。以下CLI是维护/诊断接口,日常开发无需手工执行。
|
|
4
|
+
|
|
5
|
+
`collect-ci` 是包内的只读 API 适配器;不是 WebHook 转发器。由米传汇智和运维配置中央定时/事件触发作业。WebHook 只提供待查运行编号,状态、源码和报告以固定来源查询为准。接口依据 [GitLab Jobs API](https://docs.gitlab.com/api/jobs/)、[Pipelines API](https://docs.gitlab.com/api/pipelines/) 和 [Jenkins Remote API](https://www.jenkins.io/doc/book/using/remote-access-api/)。
|
|
6
|
+
|
|
7
|
+
## 一次配置
|
|
8
|
+
|
|
9
|
+
选择 `templates/platform/ci-source.gitlab.json` 或 `ci-source.jenkins.json`,填写实际项目、批准范围、固定 HTTPS origin、分支/ref、全部必需作业、证据作业与精确工件路径。配置放在受保护中央仓库,不能从业务候选读取。
|
|
10
|
+
|
|
11
|
+
GitLab 固定数字 projectId 和批准的 Runner 编号,查询指定 pipeline、分页取全部作业,再查询精确 job;不使用“分支最新成功工件”。所有必需作业不得 allow_failure。子流水线需要分别配置实际 pipeline;不能把桥接作业成功当成下游测试成功。Runner准入不等于模板不可被作者更改;实际强制模板/独立中央作业由运维配置和反向验收。
|
|
12
|
+
|
|
13
|
+
Jenkins 固定含文件夹的 jobPath 和批准 config.xml 的 SHA256,采集前后核对配置。配置正文不复制到报告,配置读取权限单独授权。逐构建使用 Git 插件 BuildData 的唯一实际 revision 和 branch;缺失、多 SCM 冲突或只有参数 SHA 均失败。一个配置对应一条实际 Jenkins 作业,多作业组合在受控发布作业逐项验证,不把任意一条成功当成整组通过。
|
|
14
|
+
|
|
15
|
+
工件路径使用明确文件,不用 glob 或目录。下载真实 HTML/JSON/XML/制品文件,保留字节和 SHA-256;制品目录可以由构建作业先生成不可变归档文件再纳入。Jenkins 路径必须实际存在于归档列表。
|
|
16
|
+
|
|
17
|
+
## 自动执行
|
|
18
|
+
|
|
19
|
+
中央触发器从实际作业/认证系统映射作者和运行编号,分配单调序号,生成请求文件。请求只允许以下四项,不能覆盖 URL、凭据、范围或状态:
|
|
20
|
+
|
|
21
|
+
```json
|
|
22
|
+
{"sha":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","runId":123,"sequence":456,"authorId":"authenticated-employee-id"}
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
这些是示例值;不能拿示例 SHA、作者或序号签发实际证明。作者须对应源码提交者,不能直接使用流水线触发人的显示名。
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
node "$GATE_BIN" collect-ci --config "$CONTROLLED_SOURCE_CONFIG" \
|
|
29
|
+
--request "$TRUSTED_RUN_REQUEST" --out "$NEW_CAPTURE_DIRECTORY"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
仅使用环境变量中的只读凭据;HTTPS GET,禁止重定向,限制超时和大小。证据目录必须新建且不经过符号链接,失败不覆盖旧响应。输出 `source.json` 保存来源 JSON 原文、批准配置摘要、真实必需作业和下载工件摘要;`artifacts/` 保存原始字节。
|
|
33
|
+
|
|
34
|
+
全部必需作业成功返回 0,其余状态返回 2。取消/跳过/未执行不下载旧报告,也不生成质量通过事件。缺作业、错误 SHA、成功作业缺工件、超限、API不可用、采集期间变化均拒绝;实际失败作业缺制品时保留not-passed来源和missingArtifacts,不生成通过事件。中央finally/post always读取存在的来源生成失败通知并保留原退出码;无有效来源由对账登记未完成/执行异常,不能因set -e或采集失败就不入账。
|
|
35
|
+
|
|
36
|
+
配置了 `qualitySummary` 时,校验报告 schema、project、SHA、eventId、实际作业状态和全部必需作业;一致才输出**未签名**的 `quality-event.json`。该采集器不批准规则或 Review、不签发部署证明。中央隔离签发作业核对固定配置、范围与身份后调用 `governance receipt`,随后 `governance ingest`,复用已有签名、幂等台账、待复验和分类待发箱。
|
|
37
|
+
|
|
38
|
+
## 现场验收
|
|
39
|
+
|
|
40
|
+
米传汇智提供原始 API 响应、运行编号、全部必需作业和下载摘要;运维确认来源配置与凭据隔离、存储/调度。演练错误 SHA、删必需作业、allow_failure、取消、缺工件、报告篡改和机器人不可用。只有实际 Runner/API/原始工件的证据才能验收远端接线;包内模拟 HTTP 用于验证代码的拒绝行为。
|
|
41
|
+
|
|
42
|
+
SSO身份、分支保护、实际部署/冒烟、告警调度与恢复策略使用团队现有授权系统。采集器没有创建用户、修改权限或执行部署的能力。
|