@pm_zhousl/xinyun-ai-init 1.6.0 → 1.7.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/README.md +11 -0
- package/init/xinyun-ai-init/README.md +41 -2
- package/init/xinyun-ai-init/rules/directory-self-completion.md +6 -0
- package/init/xinyun-ai-init/rules/frameworks/README.md +11 -0
- package/init/xinyun-ai-init/rules/frameworks/backend/php/thinkphp.md +8 -0
- package/init/xinyun-ai-init/rules/init-rules.md +7 -1
- package/init/xinyun-ai-init/rules/session-workbench.md +20 -0
- package/init/xinyun-ai-init/rules/upgrade-rules.md +6 -0
- package/init/xinyun-ai-init/templates/AGENTS.template.md +14 -1
- package/init/xinyun-ai-init/templates/core-rules.template.md +30 -1
- package/init/xinyun-ai-init/templates/current-task.template.md +33 -0
- package/init/xinyun-ai-init/templates/framework-profile.template.json +48 -0
- package/init/xinyun-ai-init/templates/framework-profile.template.md +39 -0
- package/init/xinyun-ai-init/templates/html-migration-asset-map.template.md +6 -0
- package/init/xinyun-ai-init/templates/html-migration-compatibility-matrix.template.md +6 -0
- package/init/xinyun-ai-init/templates/html-migration-open-issues.template.md +12 -0
- package/init/xinyun-ai-init/templates/html-migration-pilot-plan.template.md +21 -0
- package/init/xinyun-ai-init/templates/html-migration-record.template.json +36 -0
- package/init/xinyun-ai-init/templates/html-migration-route-map.template.md +6 -0
- package/init/xinyun-ai-init/templates/html-migration-scope.template.md +28 -0
- package/init/xinyun-ai-init/templates/init-result.template.json +1 -1
- package/init/xinyun-ai-init/templates/managed-baseline.template.json +2 -2
- package/init/xinyun-ai-init/templates/manifest.template.json +21 -2
- package/init/xinyun-ai-init/templates/project-check.template.md +29 -0
- package/init/xinyun-ai-init/templates/project-guide.template.md +25 -0
- package/init/xinyun-ai-init/templates/project-index.template.json +40 -0
- package/init/xinyun-ai-init/templates/task-history.template.md +1 -1
- package/init/xinyun-ai-init/version.json +1 -1
- package/package.json +3 -1
- package/scripts/verify-init-package.js +147 -74
- package/scripts/verify-rules-package.js +496 -0
- package/scripts/verify-rules-tarball-security.js +134 -0
- package/test-scenarios/README.md +14 -3
- package/test-scenarios/review-template.md +22 -0
- package/test-scenarios/scenarios.md +143 -5
- package/test-scenarios/v1.7.0-scenarios.md +91 -0
|
@@ -16,6 +16,46 @@
|
|
|
16
16
|
},
|
|
17
17
|
"records": []
|
|
18
18
|
},
|
|
19
|
+
"frameworkProfile": {
|
|
20
|
+
"enabled": true,
|
|
21
|
+
"directory": "xinyun-ai/frameworks/",
|
|
22
|
+
"markdown": "xinyun-ai/frameworks/framework-profile.md",
|
|
23
|
+
"json": "xinyun-ai/frameworks/framework-profile.json",
|
|
24
|
+
"lightBudget": {
|
|
25
|
+
"maxDepthPerWorkstream": 3,
|
|
26
|
+
"maxKeyFilesPerWorkstream": 20
|
|
27
|
+
},
|
|
28
|
+
"deepBudget": {
|
|
29
|
+
"maxDepthPerWorkstream": 5,
|
|
30
|
+
"maxKeyFilesPerWorkstream": 80,
|
|
31
|
+
"maxEvidence": 100
|
|
32
|
+
},
|
|
33
|
+
"frameworkStatusEnum": ["confirmed", "inferred", "not-found", "unknown", "detected-unsupported"],
|
|
34
|
+
"moduleStatusEnum": ["loaded", "not-loaded"],
|
|
35
|
+
"activationEnum": ["loaded", "not-loaded"],
|
|
36
|
+
"records": []
|
|
37
|
+
},
|
|
38
|
+
"htmlMigration": {
|
|
39
|
+
"enabled": true,
|
|
40
|
+
"directory": "xinyun-ai/migrations/html-to-client/",
|
|
41
|
+
"scope": "xinyun-ai/migrations/html-to-client/migration-scope.md",
|
|
42
|
+
"compatibilityMatrix": "xinyun-ai/migrations/html-to-client/compatibility-matrix.md",
|
|
43
|
+
"routeMap": "xinyun-ai/migrations/html-to-client/route-map.md",
|
|
44
|
+
"assetMap": "xinyun-ai/migrations/html-to-client/asset-map.md",
|
|
45
|
+
"pilotPlan": "xinyun-ai/migrations/html-to-client/pilot-plan.md",
|
|
46
|
+
"openIssues": "xinyun-ai/migrations/html-to-client/open-issues.md",
|
|
47
|
+
"recordJson": "xinyun-ai/migrations/html-to-client/migration-record.json",
|
|
48
|
+
"defaultBudget": {
|
|
49
|
+
"maxDepth": 3,
|
|
50
|
+
"maxPages": 20,
|
|
51
|
+
"maxRelatedFiles": 200,
|
|
52
|
+
"maxEvidence": 100
|
|
53
|
+
},
|
|
54
|
+
"statusEnum": ["planned", "assessing", "partial", "blocked", "paused", "completed"],
|
|
55
|
+
"coverageEnum": ["full", "partial", "unknown"],
|
|
56
|
+
"decisionEnum": ["direct-map", "rewrite-required", "backend-required", "unsupported", "pending", "unknown"],
|
|
57
|
+
"records": []
|
|
58
|
+
},
|
|
19
59
|
"gitRepositories": {
|
|
20
60
|
"mode": "unknown",
|
|
21
61
|
"readonly": true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pm_zhousl/xinyun-ai-init",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"description": "欣芸技术开发 Agent 流初始化包",
|
|
5
5
|
"bin": {
|
|
6
6
|
"xinyun-ai-init": "bin/xinyun-ai-init.js"
|
|
@@ -14,6 +14,8 @@
|
|
|
14
14
|
],
|
|
15
15
|
"scripts": {
|
|
16
16
|
"verify:init": "node ./scripts/verify-init-package.js",
|
|
17
|
+
"verify:rules": "node ./scripts/verify-rules-package.js",
|
|
18
|
+
"verify:rules:security": "node ./scripts/verify-rules-tarball-security.js",
|
|
17
19
|
"publish:token": "powershell -ExecutionPolicy Bypass -File ./scripts/publish-with-token.ps1",
|
|
18
20
|
"publish:token:dry": "powershell -ExecutionPolicy Bypass -File ./scripts/publish-with-token.ps1 -DryRun"
|
|
19
21
|
},
|
|
@@ -104,17 +104,17 @@ function verifyPackageFiles() {
|
|
|
104
104
|
|
|
105
105
|
addCheck(
|
|
106
106
|
"package.json 版本为 1.6.0",
|
|
107
|
-
packageJson.version === "1.
|
|
107
|
+
packageJson.version === "1.7.0",
|
|
108
108
|
`当前版本为 ${packageJson.version}`
|
|
109
109
|
);
|
|
110
110
|
addCheck(
|
|
111
111
|
"version.json 版本为 1.6.0",
|
|
112
|
-
versionJson.version === "1.
|
|
112
|
+
versionJson.version === "1.7.0",
|
|
113
113
|
`当前版本为 ${versionJson.version}`
|
|
114
114
|
);
|
|
115
115
|
addCheck(
|
|
116
116
|
"manifest.template.json 版本为 1.6.0",
|
|
117
|
-
manifestTemplate.xinyunAiVersion === "1.
|
|
117
|
+
manifestTemplate.xinyunAiVersion === "1.7.0",
|
|
118
118
|
`当前版本为 ${manifestTemplate.xinyunAiVersion}`
|
|
119
119
|
);
|
|
120
120
|
}
|
|
@@ -469,80 +469,24 @@ function verifyInitRules() {
|
|
|
469
469
|
|
|
470
470
|
function verifyTestScenarios() {
|
|
471
471
|
requireIncludes("test-scenarios/scenarios.md", [
|
|
472
|
-
"
|
|
473
|
-
"
|
|
474
|
-
"
|
|
475
|
-
"
|
|
476
|
-
"
|
|
477
|
-
"
|
|
478
|
-
"
|
|
479
|
-
"
|
|
480
|
-
"
|
|
481
|
-
"框架识别证据与预算测试",
|
|
482
|
-
"多仓库 Git 只读索引测试",
|
|
483
|
-
"数据库字段变更全链路影响审视测试",
|
|
484
|
-
"中文字段变更任务分型测试",
|
|
485
|
-
"AI 项目团队初始化测试",
|
|
486
|
-
"team 路径注册一致性测试",
|
|
487
|
-
"职责确认记录测试",
|
|
488
|
-
"角色理解记录测试",
|
|
489
|
-
"职责状态到可执行流转测试",
|
|
490
|
-
"成员级自确认阻断测试",
|
|
491
|
-
"确认人缺失阻断测试",
|
|
492
|
-
"任务责任字段测试",
|
|
493
|
-
"预计文件目录记录测试",
|
|
494
|
-
"实际 diff 与超范围暂停测试",
|
|
495
|
-
"测试审查员职责边界测试",
|
|
496
|
-
"普通咨询不强制团队任务链测试",
|
|
497
|
-
"团队模板 tarball 自包含测试",
|
|
498
|
-
"v1.6-A 统一初始化任务记录测试",
|
|
499
|
-
"v1.6-A init-result.json 与业务基线证据测试",
|
|
500
|
-
"v1.6-A 幂等键与重复执行恢复测试",
|
|
501
|
-
"v1.6-A 跨文件状态机一致性测试",
|
|
502
|
-
"v1.6-B 升级差异与 SHA-256 基线测试",
|
|
503
|
-
"v1.6-B 升级冲突保护与局部修复测试",
|
|
504
|
-
"v1.6-C 能力检测证据测试",
|
|
505
|
-
"v1.6-C 通用降级方案测试",
|
|
506
|
-
"v1.6-C 版本提示与 24 小时缓存测试",
|
|
507
|
-
"v1.6-D 本地任务锁测试",
|
|
508
|
-
"v1.6-D 锁 unknown 与人工释放测试",
|
|
509
|
-
"v1.6-D 输入可信边界测试",
|
|
510
|
-
"v1.6-D 敏感信息脱敏测试",
|
|
511
|
-
"v1.6 tarball 自包含与 CLI 边界测试",
|
|
512
|
-
"当前必测场景",
|
|
513
|
-
]);
|
|
514
|
-
|
|
515
|
-
requireIncludes("test-scenarios/review-template.md", [
|
|
516
|
-
"生产页面文案与去 AI 化测试",
|
|
517
|
-
"使用者体验与交付结果测试",
|
|
518
|
-
"AI 检索与回复轻量规则测试",
|
|
519
|
-
"统一入口与旧规则失效判定测试",
|
|
520
|
-
"中文需求语义规范化测试",
|
|
521
|
-
"高风险词触发保护测试",
|
|
522
|
-
"框架识别证据与预算测试",
|
|
523
|
-
"多仓库 Git 只读索引测试",
|
|
524
|
-
"数据库字段变更全链路影响审视测试",
|
|
525
|
-
"中文字段变更任务分型测试",
|
|
526
|
-
"AI 项目团队初始化测试",
|
|
527
|
-
"成员级自确认阻断测试",
|
|
528
|
-
"实际 diff 与超范围暂停测试",
|
|
529
|
-
"团队模板 tarball 自包含测试",
|
|
530
|
-
"v1.6-A 统一初始化任务记录测试",
|
|
531
|
-
"v1.6-A init-result.json 与业务基线证据测试",
|
|
532
|
-
"v1.6-A 幂等键与重复执行恢复测试",
|
|
533
|
-
"v1.6-B 升级差异与 SHA-256 基线测试",
|
|
534
|
-
"v1.6-C 能力检测证据测试",
|
|
535
|
-
"v1.6-D 本地任务锁测试",
|
|
536
|
-
"v1.6-D 敏感信息脱敏测试",
|
|
472
|
+
"1-69",
|
|
473
|
+
"70",
|
|
474
|
+
"## 40. v1.6-A",
|
|
475
|
+
"## 53. v1.6 tarball",
|
|
476
|
+
"## 55. verify:rules",
|
|
477
|
+
"## 59. ThinkPHP",
|
|
478
|
+
"## 64. HTML",
|
|
479
|
+
"## 69. verify:rules JSON schema",
|
|
480
|
+
"## 70. Skill",
|
|
537
481
|
]);
|
|
538
482
|
|
|
539
483
|
requireIncludes("test-scenarios/README.md", [
|
|
540
|
-
"pm_zhousl-xinyun-ai-init-1.
|
|
541
|
-
"
|
|
542
|
-
"
|
|
484
|
+
"pm_zhousl-xinyun-ai-init-1.7.0.tgz",
|
|
485
|
+
"1-69",
|
|
486
|
+
"70",
|
|
487
|
+
"npm run verify:rules",
|
|
543
488
|
]);
|
|
544
489
|
}
|
|
545
|
-
|
|
546
490
|
function verifyFrameworkRules() {
|
|
547
491
|
const required = [
|
|
548
492
|
"init/xinyun-ai-init/rules/frameworks/README.md",
|
|
@@ -786,7 +730,7 @@ function verifyV16Contracts() {
|
|
|
786
730
|
]);
|
|
787
731
|
|
|
788
732
|
requireIncludes("init/xinyun-ai-init/README.md", [
|
|
789
|
-
"当前规则版本:`1.
|
|
733
|
+
"当前规则版本:`1.7.0`",
|
|
790
734
|
"v1.6 初始化任务、幂等恢复与结果记录",
|
|
791
735
|
"xinyun-ai/tasks/.idempotency/",
|
|
792
736
|
"xinyun-ai/init-result.json",
|
|
@@ -986,7 +930,7 @@ function verifyV16Contracts() {
|
|
|
986
930
|
}
|
|
987
931
|
|
|
988
932
|
addCheck("init-result mode 为 initialization", initResult.mode === "initialization");
|
|
989
|
-
addCheck("init-result targetVersion=1.
|
|
933
|
+
addCheck("init-result targetVersion=1.7.0", initResult.targetVersion === "1.7.0");
|
|
990
934
|
addCheck("init-result businessCodeChanged 初始为 unknown", initResult.businessCodeChanged && initResult.businessCodeChanged.value === "unknown");
|
|
991
935
|
addCheck("task-lock scope=xinyun-ai-control", taskLock.scope === "xinyun-ai-control");
|
|
992
936
|
addCheck("task-lock audit 包含 released", Array.isArray(taskLock.audit) && taskLock.audit.some((item) => item.action === "released"));
|
|
@@ -998,6 +942,134 @@ function verifyV16Contracts() {
|
|
|
998
942
|
);
|
|
999
943
|
}
|
|
1000
944
|
|
|
945
|
+
function verifyV17Contracts() {
|
|
946
|
+
const packageJson = JSON.parse(readText("package.json"));
|
|
947
|
+
const manifestTemplate = JSON.parse(readText("init/xinyun-ai-init/templates/manifest.template.json"));
|
|
948
|
+
const projectIndexTemplate = JSON.parse(readText("init/xinyun-ai-init/templates/project-index.template.json"));
|
|
949
|
+
const frameworkProfile = JSON.parse(readText("init/xinyun-ai-init/templates/framework-profile.template.json"));
|
|
950
|
+
const htmlMigration = JSON.parse(readText("init/xinyun-ai-init/templates/html-migration-record.template.json"));
|
|
951
|
+
|
|
952
|
+
addCheck(
|
|
953
|
+
"package.json scripts contains verify:rules",
|
|
954
|
+
packageJson.scripts && packageJson.scripts["verify:rules"] === "node ./scripts/verify-rules-package.js",
|
|
955
|
+
"missing verify:rules package consistency command"
|
|
956
|
+
);
|
|
957
|
+
|
|
958
|
+
const requiredTemplates = [
|
|
959
|
+
"init/xinyun-ai-init/templates/framework-profile.template.md",
|
|
960
|
+
"init/xinyun-ai-init/templates/framework-profile.template.json",
|
|
961
|
+
"init/xinyun-ai-init/templates/html-migration-scope.template.md",
|
|
962
|
+
"init/xinyun-ai-init/templates/html-migration-compatibility-matrix.template.md",
|
|
963
|
+
"init/xinyun-ai-init/templates/html-migration-route-map.template.md",
|
|
964
|
+
"init/xinyun-ai-init/templates/html-migration-asset-map.template.md",
|
|
965
|
+
"init/xinyun-ai-init/templates/html-migration-pilot-plan.template.md",
|
|
966
|
+
"init/xinyun-ai-init/templates/html-migration-open-issues.template.md",
|
|
967
|
+
"init/xinyun-ai-init/templates/html-migration-record.template.json",
|
|
968
|
+
"scripts/verify-rules-package.js",
|
|
969
|
+
"test-scenarios/v1.7.0-scenarios.md",
|
|
970
|
+
];
|
|
971
|
+
|
|
972
|
+
for (const file of requiredTemplates) {
|
|
973
|
+
requireFile(file);
|
|
974
|
+
}
|
|
975
|
+
|
|
976
|
+
for (const flag of [
|
|
977
|
+
"rulePackageConsistencyCheck",
|
|
978
|
+
"technologyStackProfile",
|
|
979
|
+
"thinkphpDeepProfile",
|
|
980
|
+
"htmlToClientMigrationPreparation",
|
|
981
|
+
]) {
|
|
982
|
+
addCheck(
|
|
983
|
+
`manifest capabilities contains ${flag}`,
|
|
984
|
+
manifestTemplate.capabilities && manifestTemplate.capabilities[flag] === true,
|
|
985
|
+
`manifest.template.json missing ${flag}`
|
|
986
|
+
);
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
const frameworkPaths = {
|
|
990
|
+
directory: "xinyun-ai/frameworks/",
|
|
991
|
+
markdown: "xinyun-ai/frameworks/framework-profile.md",
|
|
992
|
+
json: "xinyun-ai/frameworks/framework-profile.json",
|
|
993
|
+
};
|
|
994
|
+
for (const [key, value] of Object.entries(frameworkPaths)) {
|
|
995
|
+
addCheck(
|
|
996
|
+
`manifest frameworkProfile path ${key}`,
|
|
997
|
+
manifestTemplate.frameworkProfile && manifestTemplate.frameworkProfile[key] === value,
|
|
998
|
+
`manifest frameworkProfile.${key} should be ${value}`
|
|
999
|
+
);
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
const htmlPaths = {
|
|
1003
|
+
directory: "xinyun-ai/migrations/html-to-client/",
|
|
1004
|
+
scope: "xinyun-ai/migrations/html-to-client/migration-scope.md",
|
|
1005
|
+
compatibilityMatrix: "xinyun-ai/migrations/html-to-client/compatibility-matrix.md",
|
|
1006
|
+
routeMap: "xinyun-ai/migrations/html-to-client/route-map.md",
|
|
1007
|
+
assetMap: "xinyun-ai/migrations/html-to-client/asset-map.md",
|
|
1008
|
+
pilotPlan: "xinyun-ai/migrations/html-to-client/pilot-plan.md",
|
|
1009
|
+
openIssues: "xinyun-ai/migrations/html-to-client/open-issues.md",
|
|
1010
|
+
recordJson: "xinyun-ai/migrations/html-to-client/migration-record.json",
|
|
1011
|
+
};
|
|
1012
|
+
for (const [key, value] of Object.entries(htmlPaths)) {
|
|
1013
|
+
addCheck(
|
|
1014
|
+
`manifest htmlMigration path ${key}`,
|
|
1015
|
+
manifestTemplate.htmlMigration && manifestTemplate.htmlMigration[key] === value,
|
|
1016
|
+
`manifest htmlMigration.${key} should be ${value}`
|
|
1017
|
+
);
|
|
1018
|
+
}
|
|
1019
|
+
|
|
1020
|
+
addCheck("project-index frameworkProfile enabled", projectIndexTemplate.frameworkProfile && projectIndexTemplate.frameworkProfile.enabled === true);
|
|
1021
|
+
addCheck("project-index htmlMigration enabled", projectIndexTemplate.htmlMigration && projectIndexTemplate.htmlMigration.enabled === true);
|
|
1022
|
+
addCheck("framework profile language object exists", frameworkProfile.language && typeof frameworkProfile.language === "object");
|
|
1023
|
+
addCheck("framework profile runtime object exists", frameworkProfile.runtime && typeof frameworkProfile.runtime === "object");
|
|
1024
|
+
addCheck("framework profile platform object exists", frameworkProfile.platform && typeof frameworkProfile.platform === "object");
|
|
1025
|
+
addCheck("framework profile frameworkStatus enum default", frameworkProfile.frameworkStatus === "unknown");
|
|
1026
|
+
addCheck("framework profile moduleStatus default", frameworkProfile.moduleStatus === "not-loaded");
|
|
1027
|
+
addCheck("framework profile activation default", frameworkProfile.activation === "not-loaded");
|
|
1028
|
+
addCheck("framework profile deep budget depth=5", frameworkProfile.budgets && frameworkProfile.budgets.deep && frameworkProfile.budgets.deep.maxDepthPerWorkstream === 5);
|
|
1029
|
+
addCheck("framework profile deep budget files=80", frameworkProfile.budgets && frameworkProfile.budgets.deep && frameworkProfile.budgets.deep.maxKeyFilesPerWorkstream === 80);
|
|
1030
|
+
addCheck("framework profile deep budget evidence=100", frameworkProfile.budgets && frameworkProfile.budgets.deep && frameworkProfile.budgets.deep.maxEvidence === 100);
|
|
1031
|
+
addCheck("html migration status default planned", htmlMigration.status === "planned");
|
|
1032
|
+
addCheck("html migration coverage default unknown", htmlMigration.coverage === "unknown");
|
|
1033
|
+
addCheck("html migration budget pages=20", htmlMigration.budgets && htmlMigration.budgets.maxPages === 20);
|
|
1034
|
+
addCheck("html migration budget files=200", htmlMigration.budgets && htmlMigration.budgets.maxRelatedFiles === 200);
|
|
1035
|
+
addCheck("html migration budget evidence=100", htmlMigration.budgets && htmlMigration.budgets.maxEvidence === 100);
|
|
1036
|
+
addCheck("html migration pilot requires separate confirmation", htmlMigration.pilotPlan && htmlMigration.pilotPlan.requiresSeparateConfirmation === true);
|
|
1037
|
+
|
|
1038
|
+
requireIncludes("init/xinyun-ai-init/README.md", [
|
|
1039
|
+
"当前规则版本:`1.7.0`",
|
|
1040
|
+
"v1.7 规则包一致性检查与 verify:rules",
|
|
1041
|
+
"frameworkStatus=confirmed/inferred/not-found/unknown/detected-unsupported",
|
|
1042
|
+
"v1.7 深化预算:5 层目录、80 个关键文件、100 条证据",
|
|
1043
|
+
"HTML 迁移到微信小程序/uni-app落地准备",
|
|
1044
|
+
"decision=direct-map/rewrite-required/backend-required/unsupported/pending/unknown",
|
|
1045
|
+
"status=planned/assessing/partial/blocked/paused/completed",
|
|
1046
|
+
"coverage=full/partial/unknown",
|
|
1047
|
+
"pauseReason=out-of-scope",
|
|
1048
|
+
]);
|
|
1049
|
+
|
|
1050
|
+
requireIncludes("init/xinyun-ai-init/templates/core-rules.template.md", [
|
|
1051
|
+
"v1.7 规则包一致性检查与 verify:rules",
|
|
1052
|
+
"`language`、`runtime`、`platform`、`framework` 必须独立记录",
|
|
1053
|
+
"v1.7 HTML 迁移落地准备",
|
|
1054
|
+
"scope/unverifiedScope",
|
|
1055
|
+
]);
|
|
1056
|
+
|
|
1057
|
+
requireIncludes("test-scenarios/scenarios.md", [
|
|
1058
|
+
"当前必测场景为 1-69",
|
|
1059
|
+
"当前观察场景为 70",
|
|
1060
|
+
"## 55. verify:rules 正常通过",
|
|
1061
|
+
"## 69. verify:rules JSON schema 和重复执行",
|
|
1062
|
+
"## 70. Skill 触发测试",
|
|
1063
|
+
]);
|
|
1064
|
+
|
|
1065
|
+
requireIncludes("test-scenarios/README.md", [
|
|
1066
|
+
"pm_zhousl-xinyun-ai-init-1.7.0.tgz",
|
|
1067
|
+
"当前必测场景为 `scenarios.md` 的 1-69",
|
|
1068
|
+
"当前观察场景为 `scenarios.md` 的 70",
|
|
1069
|
+
"npm run verify:rules",
|
|
1070
|
+
]);
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1001
1073
|
function verifyJsonAndMarkdown() {
|
|
1002
1074
|
const jsonFiles = walkFiles(initRoot).filter((filePath) => filePath.endsWith(".json"));
|
|
1003
1075
|
const mdFiles = walkFiles(initRoot).filter((filePath) => filePath.endsWith(".md"));
|
|
@@ -1022,6 +1094,7 @@ function main() {
|
|
|
1022
1094
|
verifyFrameworkRules();
|
|
1023
1095
|
verifyTeamTemplates();
|
|
1024
1096
|
verifyV16Contracts();
|
|
1097
|
+
verifyV17Contracts();
|
|
1025
1098
|
verifyTestScenarios();
|
|
1026
1099
|
verifyJsonAndMarkdown();
|
|
1027
1100
|
|