@accelerator-mzq/forge 3.1.1 → 4.0.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/dist/cli/commands/archive.d.ts +32 -33
- package/dist/cli/commands/archive.d.ts.map +1 -1
- package/dist/cli/commands/archive.js +339 -667
- package/dist/cli/commands/archive.js.map +1 -1
- package/dist/cli/commands/legacy-bridge.js +1 -1
- package/dist/cli/commands/legacy-bridge.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +2 -51
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +4 -25
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.js +0 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/core/archive/index.d.ts +2 -3
- package/dist/core/archive/index.d.ts.map +1 -1
- package/dist/core/archive/index.js +7 -5
- package/dist/core/archive/index.js.map +1 -1
- package/dist/core/archive/summary-builder.d.ts +26 -21
- package/dist/core/archive/summary-builder.d.ts.map +1 -1
- package/dist/core/archive/summary-builder.js +115 -223
- package/dist/core/archive/summary-builder.js.map +1 -1
- package/dist/core/archive/summary-render.d.ts +5 -3
- package/dist/core/archive/summary-render.d.ts.map +1 -1
- package/dist/core/archive/summary-render.js +38 -44
- package/dist/core/archive/summary-render.js.map +1 -1
- package/dist/core/lock.d.ts +46 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +98 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/markers/types.d.ts +27 -134
- package/dist/core/markers/types.d.ts.map +1 -1
- package/dist/core/markers/types.js +10 -1
- package/dist/core/markers/types.js.map +1 -1
- package/dist/core/migrate/index.js +1 -1
- package/dist/core/migrate/index.js.map +1 -1
- package/dist/core/monitor/artifact-observer.d.ts.map +1 -1
- package/dist/core/monitor/artifact-observer.js +28 -78
- package/dist/core/monitor/artifact-observer.js.map +1 -1
- package/dist/core/monitor/divergence-map.d.ts.map +1 -1
- package/dist/core/monitor/divergence-map.js +9 -7
- package/dist/core/monitor/divergence-map.js.map +1 -1
- package/dist/core/monitor/health-verdict.d.ts.map +1 -1
- package/dist/core/monitor/health-verdict.js +2 -1
- package/dist/core/monitor/health-verdict.js.map +1 -1
- package/dist/core/monitor/trace-store.d.ts +1 -1
- package/dist/core/monitor/trace-store.js +2 -2
- package/dist/core/monitor/trace-store.js.map +1 -1
- package/dist/core/monitor/types.d.ts +1 -1
- package/dist/core/monitor/types.d.ts.map +1 -1
- package/dist/core/monitor/types.js +0 -1
- package/dist/core/monitor/types.js.map +1 -1
- package/dist/core/schemas/archive-summary.d.ts +39 -109
- package/dist/core/schemas/archive-summary.d.ts.map +1 -1
- package/dist/core/schemas/archive-summary.js +15 -23
- package/dist/core/schemas/archive-summary.js.map +1 -1
- package/dist/core/templates/commands/apply.md +49 -112
- package/dist/core/templates/commands/archive.md +43 -160
- package/dist/core/templates/commands/review.md +49 -74
- package/dist/core/templates/commands/upgrade.md +21 -40
- package/dist/core/templates/commands/verify.md +43 -146
- package/dist/core/templates/skills/_shared/tier23-command-bridge.md +8 -8
- package/dist/core/templates/skills/receiving-code-review.md +14 -45
- package/dist/core/templates/skills/requesting-code-review.md +4 -4
- package/dist/core/templates/skills/subagent-driven-development.md +25 -30
- package/dist/core/templates/skills/subagent-driven-discipline.md +28 -28
- package/dist/core/templates/skills/using-forge.md +24 -23
- package/dist/core/templates/skills/verification-before-completion.md +4 -4
- package/dist/core/templates/skills/verifying-three-dimensions.md +93 -169
- package/dist/core/validate/archive-summary-schema.d.ts +1 -1
- package/dist/core/validate/archive-summary-schema.d.ts.map +1 -1
- package/dist/core/validate/archive-summary-schema.js +101 -125
- package/dist/core/validate/archive-summary-schema.js.map +1 -1
- package/dist/core/validate/index.d.ts +0 -1
- package/dist/core/validate/index.d.ts.map +1 -1
- package/dist/core/validate/index.js +2 -1
- package/dist/core/validate/index.js.map +1 -1
- package/dist/core/validate/marker-schema.d.ts +12 -4
- package/dist/core/validate/marker-schema.d.ts.map +1 -1
- package/dist/core/validate/marker-schema.js +98 -605
- package/dist/core/validate/marker-schema.js.map +1 -1
- package/package.json +18 -20
|
@@ -1,30 +1,16 @@
|
|
|
1
|
-
// src/core/validate/archive-summary-schema.ts — plan-
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
1
|
+
// src/core/validate/archive-summary-schema.ts — v4 OpenSpec alignment 简版(plan-v4 Phase 1 Task 1.4)
|
|
2
|
+
//
|
|
3
|
+
// v4 BREAKING:
|
|
4
|
+
// - schema literal: forge-archive-summary/v1 → v2
|
|
5
|
+
// - 删 process_evidence_summary / acked_warnings / pending_suggestions 必填校验
|
|
6
|
+
// - 简化 handoff_to_backlog source 枚举(仅 pause_decisions / scope_entries)
|
|
7
|
+
// - 删 FENCE_INVARIANT_NAMES 依赖(archive fence 砍后无 14 不变量)
|
|
8
|
+
// - ISO 8601 允许 ms 精度(V-1 修复)
|
|
9
|
+
// - 加 spec_updates_applied forge operation 风格校验
|
|
5
10
|
import { ok, failed, mergeResults } from './types.js';
|
|
6
11
|
import { ARCHIVE_SUMMARY_ISO_8601_RE, SEMVER_RE } from '../schemas/archive-summary.js';
|
|
7
|
-
// plan-9e2 Task 3:派生 EXPECTED_INVARIANT_COUNT 从 FENCE_INVARIANT_NAMES.length(自动跟随 invariant 数演化)
|
|
8
|
-
import { FENCE_INVARIANT_NAMES } from '../archive/fence.js';
|
|
9
12
|
/**
|
|
10
|
-
*
|
|
11
|
-
* 沿 brainstorm spec §3.5 + DoD 显式要求"派生常量"语义 — 不放函数内 const,模块级单源
|
|
12
|
-
* 后续若 invariant 数演化(plan-v1.1+),本常量自动跟随 FENCE_INVARIANT_NAMES.length
|
|
13
|
-
*/
|
|
14
|
-
const EXPECTED_INVARIANT_COUNT = FENCE_INVARIANT_NAMES.length;
|
|
15
|
-
/**
|
|
16
|
-
* plan-9e2 Task 3 quality review I-1 修订:placeholder=false 路径必填的 4 个 number 字段
|
|
17
|
-
* 沿仓库约定:SCREAMING_SNAKE_CASE = 模块级常量(参 marker-schema.ts 模块级 const 模式)
|
|
18
|
-
* 与 EXPECTED_INVARIANT_COUNT 对称,避免函数内 inline 声明违约
|
|
19
|
-
*/
|
|
20
|
-
const REQUIRED_FIELDS = [
|
|
21
|
-
'invariants_passed',
|
|
22
|
-
'invariants_with_warning',
|
|
23
|
-
'invariants_failed',
|
|
24
|
-
'legacy_exempt',
|
|
25
|
-
];
|
|
26
|
-
/**
|
|
27
|
-
* 校验 archive_summary 对象的 schema 合法性
|
|
13
|
+
* 校验 archive_summary v2 对象的 schema 合法性
|
|
28
14
|
* @param m 已解析的对象
|
|
29
15
|
* @param file 可选错误报告用 archive_summary.yaml 路径
|
|
30
16
|
*/
|
|
@@ -39,11 +25,11 @@ export function validateArchiveSummarySchema(m, file) {
|
|
|
39
25
|
const obj = m;
|
|
40
26
|
const results = [];
|
|
41
27
|
// 1. schema literal
|
|
42
|
-
if (obj.schema !== 'forge-archive-summary/
|
|
28
|
+
if (obj.schema !== 'forge-archive-summary/v2') {
|
|
43
29
|
results.push(failed({
|
|
44
30
|
artifact: 'change',
|
|
45
31
|
field: 'schema',
|
|
46
|
-
message: `schema must be literal 'forge-archive-summary/
|
|
32
|
+
message: `schema must be literal 'forge-archive-summary/v2' (got: ${JSON.stringify(obj.schema)})`,
|
|
47
33
|
file,
|
|
48
34
|
}));
|
|
49
35
|
}
|
|
@@ -52,135 +38,125 @@ export function validateArchiveSummarySchema(m, file) {
|
|
|
52
38
|
results.push(failed({
|
|
53
39
|
artifact: 'change',
|
|
54
40
|
field: 'version',
|
|
55
|
-
message: 'must be semver
|
|
41
|
+
message: 'version must be semver (X.Y.Z)',
|
|
56
42
|
file,
|
|
57
43
|
}));
|
|
58
44
|
}
|
|
59
|
-
// 3. archived_at ISO 8601
|
|
45
|
+
// 3. archived_at ISO 8601(允许 ms)
|
|
60
46
|
if (typeof obj.archived_at !== 'string' || !ARCHIVE_SUMMARY_ISO_8601_RE.test(obj.archived_at)) {
|
|
61
47
|
results.push(failed({
|
|
62
48
|
artifact: 'change',
|
|
63
49
|
field: 'archived_at',
|
|
64
|
-
message: 'must be ISO 8601 UTC (YYYY-MM-DDTHH:MM:
|
|
65
|
-
file,
|
|
66
|
-
}));
|
|
67
|
-
}
|
|
68
|
-
// 4. change_id 非空 string
|
|
69
|
-
if (typeof obj.change_id !== 'string' || !obj.change_id) {
|
|
70
|
-
results.push(failed({
|
|
71
|
-
artifact: 'change',
|
|
72
|
-
field: 'change_id',
|
|
73
|
-
message: 'must be non-empty string',
|
|
74
|
-
file,
|
|
75
|
-
}));
|
|
76
|
-
}
|
|
77
|
-
// 5. verify_passed object
|
|
78
|
-
if (!obj.verify_passed ||
|
|
79
|
-
typeof obj.verify_passed !== 'object' ||
|
|
80
|
-
Array.isArray(obj.verify_passed)) {
|
|
81
|
-
results.push(failed({
|
|
82
|
-
artifact: 'change',
|
|
83
|
-
field: 'verify_passed',
|
|
84
|
-
message: 'must be object',
|
|
85
|
-
file,
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
|
-
// 6. review_passed object
|
|
89
|
-
if (!obj.review_passed ||
|
|
90
|
-
typeof obj.review_passed !== 'object' ||
|
|
91
|
-
Array.isArray(obj.review_passed)) {
|
|
92
|
-
results.push(failed({
|
|
93
|
-
artifact: 'change',
|
|
94
|
-
field: 'review_passed',
|
|
95
|
-
message: 'must be object',
|
|
50
|
+
message: 'must be ISO 8601 UTC (YYYY-MM-DDTHH:MM:SS[.fff]Z)',
|
|
96
51
|
file,
|
|
97
52
|
}));
|
|
98
53
|
}
|
|
99
|
-
//
|
|
100
|
-
|
|
101
|
-
typeof obj
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
}
|
|
54
|
+
// 4. change_id / archive_name / verified_by / reviewed_by 必填非空 string
|
|
55
|
+
for (const k of ['change_id', 'archive_name', 'verified_by', 'reviewed_by']) {
|
|
56
|
+
if (typeof obj[k] !== 'string' || obj[k].length === 0) {
|
|
57
|
+
results.push(failed({
|
|
58
|
+
artifact: 'change',
|
|
59
|
+
field: k,
|
|
60
|
+
message: `${k} must be non-empty string`,
|
|
61
|
+
file,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
109
64
|
}
|
|
110
|
-
//
|
|
111
|
-
if (obj.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
message: `required number when placeholder=false`,
|
|
124
|
-
file,
|
|
125
|
-
}));
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// 仅当 4 字段全部为 number 才走值域 + sum 不变式(避免 NaN 干扰)
|
|
129
|
-
if (REQUIRED_FIELDS.every((f) => typeof peSummary[f] === 'number')) {
|
|
130
|
-
// 2. 值域 [0, EXPECTED_INVARIANT_COUNT]
|
|
131
|
-
for (const field of REQUIRED_FIELDS) {
|
|
132
|
-
const v = peSummary[field];
|
|
133
|
-
if (v < 0 || v > EXPECTED_INVARIANT_COUNT) {
|
|
134
|
-
results.push(failed({
|
|
135
|
-
artifact: 'change',
|
|
136
|
-
field: `process_evidence_summary.${field}`,
|
|
137
|
-
message: `must be in [0, ${EXPECTED_INVARIANT_COUNT}]`,
|
|
138
|
-
file,
|
|
139
|
-
}));
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
// 3. sum 不变式(v2 codex 一轮 MAJOR 修订:4 字段 sum)
|
|
143
|
-
const sum = peSummary.invariants_passed +
|
|
144
|
-
peSummary.invariants_with_warning +
|
|
145
|
-
peSummary.invariants_failed +
|
|
146
|
-
peSummary.legacy_exempt;
|
|
147
|
-
if (sum !== EXPECTED_INVARIANT_COUNT) {
|
|
65
|
+
// 5. applied_commits 可选,若存在必须 string[]
|
|
66
|
+
if (obj.applied_commits !== undefined) {
|
|
67
|
+
if (!Array.isArray(obj.applied_commits)) {
|
|
68
|
+
results.push(failed({
|
|
69
|
+
artifact: 'change',
|
|
70
|
+
field: 'applied_commits',
|
|
71
|
+
message: 'applied_commits must be array if present',
|
|
72
|
+
file,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
for (let i = 0; i < obj.applied_commits.length; i++) {
|
|
77
|
+
if (typeof obj.applied_commits[i] !== 'string') {
|
|
148
78
|
results.push(failed({
|
|
149
79
|
artifact: 'change',
|
|
150
|
-
field:
|
|
151
|
-
message:
|
|
80
|
+
field: `applied_commits[${i}]`,
|
|
81
|
+
message: 'applied_commits item must be string',
|
|
152
82
|
file,
|
|
153
83
|
}));
|
|
154
84
|
}
|
|
155
85
|
}
|
|
156
86
|
}
|
|
157
|
-
// placeholder=true 路径不变(9e1 容忍)
|
|
158
87
|
}
|
|
159
|
-
//
|
|
160
|
-
if (!Array.isArray(obj.
|
|
88
|
+
// 6. spec_updates_applied 必填数组(可空)
|
|
89
|
+
if (!Array.isArray(obj.spec_updates_applied)) {
|
|
161
90
|
results.push(failed({
|
|
162
91
|
artifact: 'change',
|
|
163
|
-
field: '
|
|
164
|
-
message: 'must be array',
|
|
92
|
+
field: 'spec_updates_applied',
|
|
93
|
+
message: 'spec_updates_applied must be array',
|
|
165
94
|
file,
|
|
166
95
|
}));
|
|
167
96
|
}
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
97
|
+
else {
|
|
98
|
+
const ALLOWED_OPS = ['create', 'replace', 'delete'];
|
|
99
|
+
for (let i = 0; i < obj.spec_updates_applied.length; i++) {
|
|
100
|
+
const u = obj.spec_updates_applied[i];
|
|
101
|
+
if (!u || typeof u !== 'object') {
|
|
102
|
+
results.push(failed({
|
|
103
|
+
artifact: 'change',
|
|
104
|
+
field: `spec_updates_applied[${i}]`,
|
|
105
|
+
message: 'must be object',
|
|
106
|
+
file,
|
|
107
|
+
}));
|
|
108
|
+
continue;
|
|
109
|
+
}
|
|
110
|
+
if (typeof u.capability !== 'string' || u.capability.length === 0) {
|
|
111
|
+
results.push(failed({
|
|
112
|
+
artifact: 'change',
|
|
113
|
+
field: `spec_updates_applied[${i}].capability`,
|
|
114
|
+
message: 'capability must be non-empty string',
|
|
115
|
+
file,
|
|
116
|
+
}));
|
|
117
|
+
}
|
|
118
|
+
if (typeof u.operation !== 'string' || !ALLOWED_OPS.includes(u.operation)) {
|
|
119
|
+
results.push(failed({
|
|
120
|
+
artifact: 'change',
|
|
121
|
+
field: `spec_updates_applied[${i}].operation`,
|
|
122
|
+
message: `operation must ∈ {${ALLOWED_OPS.join(', ')}}`,
|
|
123
|
+
file,
|
|
124
|
+
}));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
175
127
|
}
|
|
176
|
-
|
|
128
|
+
// 7. handoff_to_backlog 必填数组(可空)
|
|
129
|
+
if (!Array.isArray(obj.handoff_to_backlog)) {
|
|
177
130
|
results.push(failed({
|
|
178
131
|
artifact: 'change',
|
|
179
|
-
field: '
|
|
180
|
-
message: 'must be array',
|
|
132
|
+
field: 'handoff_to_backlog',
|
|
133
|
+
message: 'handoff_to_backlog must be array',
|
|
181
134
|
file,
|
|
182
135
|
}));
|
|
183
136
|
}
|
|
137
|
+
else {
|
|
138
|
+
const ALLOWED_SOURCES = ['pause_decisions', 'scope_entries'];
|
|
139
|
+
for (let i = 0; i < obj.handoff_to_backlog.length; i++) {
|
|
140
|
+
const h = obj.handoff_to_backlog[i];
|
|
141
|
+
if (!h || typeof h !== 'object') {
|
|
142
|
+
results.push(failed({
|
|
143
|
+
artifact: 'change',
|
|
144
|
+
field: `handoff_to_backlog[${i}]`,
|
|
145
|
+
message: 'must be object',
|
|
146
|
+
file,
|
|
147
|
+
}));
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
if (typeof h.source !== 'string' || !ALLOWED_SOURCES.includes(h.source)) {
|
|
151
|
+
results.push(failed({
|
|
152
|
+
artifact: 'change',
|
|
153
|
+
field: `handoff_to_backlog[${i}].source`,
|
|
154
|
+
message: `source must ∈ {${ALLOWED_SOURCES.join(', ')}}`,
|
|
155
|
+
file,
|
|
156
|
+
}));
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
184
160
|
return results.length === 0 ? ok() : mergeResults(...results);
|
|
185
161
|
}
|
|
186
162
|
//# sourceMappingURL=archive-summary-schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive-summary-schema.js","sourceRoot":"","sources":["../../../src/core/validate/archive-summary-schema.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"archive-summary-schema.js","sourceRoot":"","sources":["../../../src/core/validate/archive-summary-schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ export * from './specs.js';
|
|
|
4
4
|
export * from './tasks.js';
|
|
5
5
|
export * from './change.js';
|
|
6
6
|
export * from './marker-schema.js';
|
|
7
|
-
export * from './marker-integrity.js';
|
|
8
7
|
export * from './finding-hash.js';
|
|
9
8
|
export * from './candidate-validators.js';
|
|
10
9
|
export * from './scope-entries.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AAInC,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAE1C,cAAc,oBAAoB,CAAC;AAEnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,6BAA6B,CAAC"}
|
|
@@ -4,8 +4,9 @@ export * from './specs.js';
|
|
|
4
4
|
export * from './tasks.js';
|
|
5
5
|
export * from './change.js';
|
|
6
6
|
export * from './marker-schema.js';
|
|
7
|
-
export * from './marker-integrity.js';
|
|
8
7
|
// Task 7(plan-9a §8): cross-cutting framework — finding_hash 计算 + candidate 验证骨架
|
|
8
|
+
// v4 BREAKING(plan-v4 §10.1.6 Task 1.19):删 marker-integrity barrel(integrity fence 消亡),
|
|
9
|
+
// 保留 finding-hash(Tier 2/3 multi-harness bridge `forge finding hash` 依赖)
|
|
9
10
|
export * from './finding-hash.js';
|
|
10
11
|
export * from './candidate-validators.js';
|
|
11
12
|
// plan-9b Task 4: scope YAML block 校验
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/validate/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,iFAAiF;AACjF,wFAAwF;AACxF,yEAAyE;AACzE,cAAc,mBAAmB,CAAC;AAClC,cAAc,2BAA2B,CAAC;AAC1C,sCAAsC;AACtC,cAAc,oBAAoB,CAAC;AACnC,uBAAuB;AACvB,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AACvC,6CAA6C;AAC7C,cAAc,6BAA6B,CAAC"}
|
|
@@ -1,10 +1,18 @@
|
|
|
1
1
|
import type { AnyMarker } from '../markers/index.js';
|
|
2
2
|
import { type ValidationResult } from './types.js';
|
|
3
3
|
/**
|
|
4
|
-
* 校验 marker
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* validateMarkerSchema — 校验 marker 文件的 schema 类型 + 必填字段
|
|
5
|
+
*
|
|
6
|
+
* v4 简版:仅校验
|
|
7
|
+
* - schema 字段是否在 KNOWN_SCHEMAS 中
|
|
8
|
+
* - verified_at / reviewed_at ISO 8601 (允许 ms)
|
|
9
|
+
* - verified_by / reviewed_by 字符串非空
|
|
10
|
+
* - pause_decisions 数组类型(若存在)+ 内字段类型
|
|
11
|
+
* - created_by_tool_version semver 格式(若存在)
|
|
12
|
+
*
|
|
13
|
+
* 不再校验:tasks_hash / content_hash / git / process_evidence / ack_log_* / verify_findings
|
|
14
|
+
* (v4 反加固协议砍后这些字段已从 marker 删除)
|
|
7
15
|
*/
|
|
8
|
-
export declare function validateMarkerSchema(
|
|
16
|
+
export declare function validateMarkerSchema(obj: unknown, file?: string): ValidationResult;
|
|
9
17
|
export type { AnyMarker };
|
|
10
18
|
//# sourceMappingURL=marker-schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"marker-schema.d.ts","sourceRoot":"","sources":["../../../src/core/validate/marker-schema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"marker-schema.d.ts","sourceRoot":"","sources":["../../../src/core/validate/marker-schema.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,YAAY,CAAC;AAW7E;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAwElF;AAmGD,YAAY,EAAE,SAAS,EAAE,CAAC"}
|