@captain_z/zsk 1.8.7 → 1.8.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +34 -16
  2. package/dist/bin.js +6 -0
  3. package/dist/bin.js.map +1 -1
  4. package/dist/commands/prepare.js +3 -0
  5. package/dist/commands/prepare.js.map +1 -1
  6. package/dist/core/anchor-drift.d.ts +79 -0
  7. package/dist/core/anchor-drift.js +198 -0
  8. package/dist/core/anchor-drift.js.map +1 -0
  9. package/dist/core/decoupling-eval.d.ts +53 -0
  10. package/dist/core/decoupling-eval.js +260 -0
  11. package/dist/core/decoupling-eval.js.map +1 -0
  12. package/dist/core/installer.js +2 -2
  13. package/dist/core/installer.js.map +1 -1
  14. package/dist/core/issue-publish-adapter.d.ts +50 -0
  15. package/dist/core/issue-publish-adapter.js +371 -0
  16. package/dist/core/issue-publish-adapter.js.map +1 -0
  17. package/dist/core/prepare-artifacts.d.ts +2 -0
  18. package/dist/core/prepare-artifacts.js +2 -0
  19. package/dist/core/prepare-artifacts.js.map +1 -1
  20. package/dist/core/prepare-readiness.d.ts +40 -0
  21. package/dist/core/prepare-readiness.js +268 -0
  22. package/dist/core/prepare-readiness.js.map +1 -0
  23. package/dist/core/prepare-sync.d.ts +2 -0
  24. package/dist/core/prepare-sync.js +8 -16
  25. package/dist/core/prepare-sync.js.map +1 -1
  26. package/dist/core/review-skill-policy.d.ts +74 -0
  27. package/dist/core/review-skill-policy.js +278 -0
  28. package/dist/core/review-skill-policy.js.map +1 -0
  29. package/dist/core/skills.js +38 -14
  30. package/dist/core/skills.js.map +1 -1
  31. package/dist/core/source-snapshot-adapters.d.ts +3 -0
  32. package/dist/core/source-snapshot-adapters.js.map +1 -1
  33. package/dist/core/stage-clarity-verification.js +30 -16
  34. package/dist/core/stage-clarity-verification.js.map +1 -1
  35. package/dist/core/task-decomposition.d.ts +64 -0
  36. package/dist/core/task-decomposition.js +325 -0
  37. package/dist/core/task-decomposition.js.map +1 -0
  38. package/dist/core/task-plan-adapter.d.ts +57 -0
  39. package/dist/core/task-plan-adapter.js +298 -0
  40. package/dist/core/task-plan-adapter.js.map +1 -0
  41. package/dist/core/validation-packet.d.ts +86 -0
  42. package/dist/core/validation-packet.js +313 -0
  43. package/dist/core/validation-packet.js.map +1 -0
  44. package/dist/core/workflow-orchestration-policy.d.ts +92 -0
  45. package/dist/core/workflow-orchestration-policy.js +215 -0
  46. package/dist/core/workflow-orchestration-policy.js.map +1 -0
  47. package/package.json +2 -2
@@ -0,0 +1,371 @@
1
+ import { mkdirSync, writeFileSync } from "node:fs";
2
+ import { dirname, resolve } from "node:path";
3
+ import { evaluateTaskDecomposition, } from "./task-decomposition.js";
4
+ import { isPathInside } from "./workspace-conformance.js";
5
+ const TARGET_SCORE = 100;
6
+ const REQUIRED_BODY_SECTIONS = [
7
+ "## Parent",
8
+ "## What to build",
9
+ "## Acceptance criteria",
10
+ "## Blocked by",
11
+ "## Task todo",
12
+ "## Checkpoints",
13
+ ];
14
+ const SIDE_EFFECT_FIELDS = new Set([
15
+ "gate",
16
+ "dispatch",
17
+ "agent",
18
+ "nextSkill",
19
+ "workflowNext",
20
+ "route",
21
+ "staffing",
22
+ ]);
23
+ const SAFE_FEATURE_SLUG_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
24
+ export function createIssuePublishPlan(decomposition, options) {
25
+ const mode = options.mode ?? "dry-run";
26
+ assertSafeFeatureSlug(options.featureSlug);
27
+ const assessment = evaluateTaskDecomposition(decomposition);
28
+ const selected = selectCandidates(decomposition.candidates, options.selectedCandidateIds);
29
+ const ordered = orderByDependency(selected);
30
+ const issues = ordered.map((candidate, index) => renderIssueDraft(candidate, {
31
+ number: String(index + 1).padStart(2, "0"),
32
+ featureSlug: options.featureSlug,
33
+ parentPath: options.parentPath,
34
+ }));
35
+ const plan = {
36
+ version: 1,
37
+ kind: "issue-publish-plan",
38
+ sourceEngine: "task-decomposition",
39
+ source: decomposition.source,
40
+ assessment,
41
+ mode,
42
+ parentPath: options.parentPath,
43
+ featureSlug: options.featureSlug,
44
+ selectedCandidateIds: ordered.map((candidate) => candidate.id),
45
+ localSideEffects: mode === "write" ? "write-issue-markdown" : "none",
46
+ workflowSideEffects: [],
47
+ issues,
48
+ };
49
+ if (mode === "write") {
50
+ const publishAssessment = evaluateIssuePublishPlan(plan);
51
+ if (publishAssessment.status === "invalid") {
52
+ throw new Error(`Issue publish plan is invalid: ${publishAssessment.diagnostics.map((diagnostic) => diagnostic.code).join(", ")}`);
53
+ }
54
+ writeIssues(plan, options.targetRoot);
55
+ }
56
+ return plan;
57
+ }
58
+ export function evaluateIssuePublishPlan(plan) {
59
+ const diagnostics = [
60
+ ...diagnosePlanShape(plan),
61
+ ...diagnoseIssueDrafts(plan),
62
+ ...diagnoseDependencyOrder(plan),
63
+ ...diagnoseSideEffects(plan),
64
+ ];
65
+ const status = diagnostics.some((diagnostic) => diagnostic.severity === "failure")
66
+ ? "invalid"
67
+ : diagnostics.length > 0
68
+ ? "warning"
69
+ : "valid";
70
+ return {
71
+ status,
72
+ targetScore: TARGET_SCORE,
73
+ score: scoreDiagnostics(diagnostics),
74
+ diagnostics,
75
+ };
76
+ }
77
+ function selectCandidates(candidates, selectedCandidateIds) {
78
+ if (!selectedCandidateIds || selectedCandidateIds.length === 0)
79
+ return [...candidates];
80
+ const selected = new Set(selectedCandidateIds);
81
+ return candidates.filter((candidate) => selected.has(candidate.id));
82
+ }
83
+ function orderByDependency(candidates) {
84
+ const pending = new Map(candidates.map((candidate) => [candidate.id, candidate]));
85
+ const emitted = new Set();
86
+ const ordered = [];
87
+ while (pending.size > 0) {
88
+ let progressed = false;
89
+ for (const [id, candidate] of [...pending.entries()]) {
90
+ const localDependencies = candidate.blockedBy.filter((dependency) => pending.has(dependency) || emitted.has(dependency));
91
+ if (localDependencies.every((dependency) => emitted.has(dependency))) {
92
+ ordered.push(candidate);
93
+ emitted.add(id);
94
+ pending.delete(id);
95
+ progressed = true;
96
+ }
97
+ }
98
+ if (!progressed) {
99
+ ordered.push(...pending.values());
100
+ break;
101
+ }
102
+ }
103
+ return ordered;
104
+ }
105
+ function renderIssueDraft(candidate, input) {
106
+ const slug = slugify(candidate.title);
107
+ const path = `.scratch/${input.featureSlug}/issues/${input.number}-${slug}.md`;
108
+ return {
109
+ candidateId: candidate.id,
110
+ number: input.number,
111
+ title: candidate.title,
112
+ path,
113
+ status: candidate.workMode === "HITL" ? "ready-for-human" : "ready-for-agent",
114
+ workMode: candidate.workMode,
115
+ blockedBy: [...candidate.blockedBy],
116
+ unblocks: [...candidate.unblocks],
117
+ priority: candidate.priority,
118
+ body: renderIssueBody(candidate, {
119
+ parentPath: input.parentPath,
120
+ }),
121
+ };
122
+ }
123
+ function renderIssueBody(candidate, input) {
124
+ return [
125
+ `# ${candidate.title}`,
126
+ "",
127
+ `Status: ${candidate.workMode === "HITL" ? "ready-for-human" : "ready-for-agent"}`,
128
+ `Type: ${candidate.workMode}`,
129
+ `Priority: ${candidate.priority}`,
130
+ `Task group: ${candidate.group}`,
131
+ "",
132
+ "## Parent",
133
+ "",
134
+ input.parentPath,
135
+ "",
136
+ "## What to build",
137
+ "",
138
+ candidate.title,
139
+ "",
140
+ "## Acceptance criteria",
141
+ "",
142
+ renderBullets(candidate.acceptanceCriteria),
143
+ "",
144
+ "## Blocked by",
145
+ "",
146
+ candidate.blockedBy.length > 0 ? renderBullets(candidate.blockedBy) : "- none",
147
+ "",
148
+ "## Task todo",
149
+ "",
150
+ renderBullets(candidate.todo),
151
+ "",
152
+ "## Checkpoints",
153
+ "",
154
+ renderCheckpointBullets(candidate),
155
+ "",
156
+ "## Validation",
157
+ "",
158
+ renderValidation(candidate),
159
+ "",
160
+ ].join("\n");
161
+ }
162
+ function assertSafeFeatureSlug(featureSlug) {
163
+ if (isSafeFeatureSlug(featureSlug))
164
+ return;
165
+ throw new Error(`featureSlug must be a lowercase dash-separated slug: ${featureSlug}`);
166
+ }
167
+ function isSafeFeatureSlug(featureSlug) {
168
+ return SAFE_FEATURE_SLUG_RE.test(featureSlug);
169
+ }
170
+ function writeIssues(plan, targetRoot) {
171
+ if (!targetRoot) {
172
+ throw new Error("targetRoot is required when issue publish mode is write");
173
+ }
174
+ const root = resolve(targetRoot);
175
+ for (const issue of plan.issues) {
176
+ const destination = resolve(root, issue.path);
177
+ if (!isPathInside(root, destination)) {
178
+ throw new Error(`Issue publish issue path must stay inside targetRoot: ${issue.path}`);
179
+ }
180
+ mkdirSync(dirname(destination), { recursive: true });
181
+ writeFileSync(destination, issue.body, "utf8");
182
+ }
183
+ }
184
+ function diagnosePlanShape(plan) {
185
+ const diagnostics = [];
186
+ if (!isSafeFeatureSlug(plan.featureSlug)) {
187
+ diagnostics.push(diagnostic({
188
+ code: "invalid-feature-slug",
189
+ severity: "failure",
190
+ message: "Issue publish featureSlug must be a lowercase dash-separated slug.",
191
+ evidence: [String(plan.featureSlug)],
192
+ }));
193
+ }
194
+ if (plan.version !== 1 || plan.kind !== "issue-publish-plan") {
195
+ diagnostics.push(diagnostic({
196
+ code: "invalid-publish-plan-shape",
197
+ severity: "failure",
198
+ message: "Issue publish plan must use version 1 and kind issue-publish-plan.",
199
+ evidence: [String(plan.version), String(plan.kind)],
200
+ }));
201
+ }
202
+ if (plan.sourceEngine !== "task-decomposition") {
203
+ diagnostics.push(diagnostic({
204
+ code: "missing-shared-decomposition-source",
205
+ severity: "failure",
206
+ message: "Issue publish plan must be derived from the shared task decomposition engine.",
207
+ evidence: [String(plan.sourceEngine)],
208
+ }));
209
+ }
210
+ if (!plan.parentPath?.trim()) {
211
+ diagnostics.push(diagnostic({
212
+ code: "missing-parent-linkage",
213
+ severity: "failure",
214
+ message: "Published issues must record the parent PRD, plan, spec, or issue path.",
215
+ evidence: [],
216
+ }));
217
+ }
218
+ if (!plan.assessment || plan.assessment.status === "invalid") {
219
+ diagnostics.push(diagnostic({
220
+ code: "invalid-task-decomposition-assessment",
221
+ severity: "failure",
222
+ message: "Issue publish plan must preserve a non-invalid shared decomposition assessment.",
223
+ evidence: plan.assessment ? [plan.assessment.status] : [],
224
+ }));
225
+ }
226
+ if (!Array.isArray(plan.issues) || plan.issues.length === 0) {
227
+ diagnostics.push(diagnostic({
228
+ code: "missing-issues",
229
+ severity: "failure",
230
+ message: "Issue publish plan must include issue drafts.",
231
+ evidence: [],
232
+ }));
233
+ }
234
+ if (plan.mode === "dry-run" && plan.localSideEffects !== "none") {
235
+ diagnostics.push(diagnostic({
236
+ code: "unexpected-local-side-effect",
237
+ severity: "failure",
238
+ message: "Dry-run issue publishing must not write local issue markdown.",
239
+ evidence: [String(plan.localSideEffects)],
240
+ }));
241
+ }
242
+ if (plan.mode === "write" && plan.localSideEffects !== "write-issue-markdown") {
243
+ diagnostics.push(diagnostic({
244
+ code: "missing-write-side-effect-declaration",
245
+ severity: "failure",
246
+ message: "Write-mode issue publishing must explicitly declare markdown write side effects.",
247
+ evidence: [String(plan.localSideEffects)],
248
+ }));
249
+ }
250
+ if (!Array.isArray(plan.workflowSideEffects) || plan.workflowSideEffects.length > 0) {
251
+ diagnostics.push(diagnostic({
252
+ code: "workflow-side-effect",
253
+ severity: "failure",
254
+ message: "Issue publish adapter must not execute gate, staffing, dispatch, or workflow routing.",
255
+ evidence: Array.isArray(plan.workflowSideEffects) ? plan.workflowSideEffects.map(String) : [],
256
+ }));
257
+ }
258
+ return diagnostics;
259
+ }
260
+ function diagnoseIssueDrafts(plan) {
261
+ if (!Array.isArray(plan.issues))
262
+ return [];
263
+ const diagnostics = [];
264
+ const paths = new Set();
265
+ for (const issue of plan.issues) {
266
+ if (paths.has(issue.path)) {
267
+ diagnostics.push(issueDiagnostic(issue, "duplicate-issue-path", "failure", "Issue publish plan produced duplicate issue paths.", [issue.path]));
268
+ }
269
+ paths.add(issue.path);
270
+ const expectedStatus = issue.workMode === "HITL" ? "ready-for-human" : "ready-for-agent";
271
+ if (issue.status !== expectedStatus) {
272
+ diagnostics.push(issueDiagnostic(issue, "status-mapping-invalid", "failure", "AFK tasks must map to ready-for-agent and HITL tasks to ready-for-human.", [issue.status, expectedStatus]));
273
+ }
274
+ if (!issue.path?.startsWith(`.scratch/${plan.featureSlug}/issues/`)) {
275
+ diagnostics.push(issueDiagnostic(issue, "invalid-issue-path", "failure", "Published issue path must stay inside the selected feature issue bucket.", [issue.path]));
276
+ }
277
+ for (const section of REQUIRED_BODY_SECTIONS) {
278
+ if (!issue.body?.includes(section)) {
279
+ diagnostics.push(issueDiagnostic(issue, "missing-issue-section", "failure", `Published issue body is missing ${section}.`, [section]));
280
+ }
281
+ }
282
+ }
283
+ return diagnostics;
284
+ }
285
+ function diagnoseDependencyOrder(plan) {
286
+ if (!Array.isArray(plan.issues))
287
+ return [];
288
+ const issueIndex = new Map(plan.issues.map((issue, index) => [issue.candidateId, index]));
289
+ const diagnostics = [];
290
+ for (const issue of plan.issues) {
291
+ const current = issueIndex.get(issue.candidateId) ?? -1;
292
+ for (const dependency of issue.blockedBy ?? []) {
293
+ const dependencyIndex = issueIndex.get(dependency);
294
+ if (dependencyIndex !== undefined && dependencyIndex > current) {
295
+ diagnostics.push(issueDiagnostic(issue, "dependency-order-invalid", "failure", "Published issue depends on a candidate that is numbered later in the same publish plan.", [dependency]));
296
+ }
297
+ }
298
+ }
299
+ return diagnostics;
300
+ }
301
+ function diagnoseSideEffects(plan) {
302
+ const diagnostics = [];
303
+ for (const field of Object.keys(plan)) {
304
+ if (SIDE_EFFECT_FIELDS.has(field)) {
305
+ diagnostics.push(diagnostic({
306
+ code: "workflow-side-effect",
307
+ severity: "failure",
308
+ message: `Issue publish plan must not include workflow side-effect field ${field}.`,
309
+ evidence: [field],
310
+ }));
311
+ }
312
+ }
313
+ for (const issue of Array.isArray(plan.issues) ? plan.issues : []) {
314
+ for (const field of Object.keys(issue)) {
315
+ if (SIDE_EFFECT_FIELDS.has(field)) {
316
+ diagnostics.push(issueDiagnostic(issue, "workflow-side-effect", "failure", `Issue draft must not include workflow side-effect field ${field}.`, [field]));
317
+ }
318
+ }
319
+ }
320
+ return diagnostics;
321
+ }
322
+ function scoreDiagnostics(diagnostics) {
323
+ const penalty = diagnostics.reduce((total, diagnostic) => {
324
+ return total + (diagnostic.severity === "failure" ? 20 : 10);
325
+ }, 0);
326
+ return Math.max(0, TARGET_SCORE - penalty);
327
+ }
328
+ function renderBullets(items) {
329
+ return items.length > 0 ? items.map((item) => `- ${item}`).join("\n") : "- none";
330
+ }
331
+ function renderCheckpointBullets(candidate) {
332
+ return [
333
+ `- Ready: ${candidate.checkpoints.ready}`,
334
+ candidate.checkpoints.red ? `- Red: ${candidate.checkpoints.red}` : null,
335
+ `- Green: ${candidate.checkpoints.green}`,
336
+ candidate.checkpoints.refactor ? `- Refactor: ${candidate.checkpoints.refactor}` : null,
337
+ `- Review: ${candidate.checkpoints.review}`,
338
+ `- Verify: ${candidate.checkpoints.verify}`,
339
+ candidate.checkpoints.done ? `- Done: ${candidate.checkpoints.done}` : null,
340
+ ].filter((item) => Boolean(item)).join("\n");
341
+ }
342
+ function renderValidation(candidate) {
343
+ return candidate.validation.map((hook) => {
344
+ if (typeof hook === "string")
345
+ return `- ${hook}`;
346
+ return `- ${hook.kind}: ${hook.expected}${hook.command ? ` (${hook.command})` : ""}`;
347
+ }).join("\n") || "- none";
348
+ }
349
+ function slugify(value) {
350
+ return value
351
+ .trim()
352
+ .toLowerCase()
353
+ .replace(/[^a-z0-9]+/g, "-")
354
+ .replace(/^-+|-+$/g, "") || "issue";
355
+ }
356
+ function diagnostic(input) {
357
+ return {
358
+ evidence: [],
359
+ ...input,
360
+ };
361
+ }
362
+ function issueDiagnostic(issue, code, severity, message, evidence) {
363
+ return diagnostic({
364
+ code,
365
+ severity,
366
+ candidateId: issue.candidateId,
367
+ message,
368
+ evidence,
369
+ });
370
+ }
371
+ //# sourceMappingURL=issue-publish-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue-publish-adapter.js","sourceRoot":"","sources":["../../src/core/issue-publish-adapter.ts"],"names":[],"mappings":"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"}
@@ -10,6 +10,8 @@ export type PrepareSyncArtifacts = {
10
10
  authStatePath: string;
11
11
  migrationPlanPath: string;
12
12
  syncReportPath: string;
13
+ readinessMatrixPath: string;
14
+ readinessMatrixMarkdownPath: string;
13
15
  };
14
16
  export declare function resolvePrepareSyncArtifacts(target: string, config: ProjectConfig, runId: string): PrepareSyncArtifacts;
15
17
  export declare function prepareAuthRoot(artifacts: PrepareSyncArtifacts): string;
@@ -14,6 +14,8 @@ export function resolvePrepareSyncArtifacts(target, config, runId) {
14
14
  authStatePath: join(authDir, "user_data.json"),
15
15
  migrationPlanPath: join(dir, "raws-migration-plan.md"),
16
16
  syncReportPath: resolve(target, getWorkspacePath(config, "evidenceRoot"), "prepare", "sync-report.md"),
17
+ readinessMatrixPath: resolve(target, getWorkspacePath(config, "evidenceRoot"), "prepare", "readiness-matrix.json"),
18
+ readinessMatrixMarkdownPath: resolve(target, getWorkspacePath(config, "evidenceRoot"), "prepare", "readiness-matrix.md"),
17
19
  };
18
20
  }
19
21
  export function prepareAuthRoot(artifacts) {
@@ -1 +1 @@
1
- {"version":3,"file":"prepare-artifacts.js","sourceRoot":"","sources":["../../src/core/prepare-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAezD,MAAM,UAAU,2BAA2B,CACzC,MAAc,EACd,MAAqB,EACrB,KAAa;IAEb,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,OAAO;QACL,KAAK;QACL,GAAG;QACH,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC;QAC/C,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC;QACrD,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC;QAC3C,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC;QACvD,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC1C,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QAC9C,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC;QACtD,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC;KACvG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAA+B;IAC7D,OAAO,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;IAC9C,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC"}
1
+ {"version":3,"file":"prepare-artifacts.js","sourceRoot":"","sources":["../../src/core/prepare-artifacts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAiBzD,MAAM,UAAU,2BAA2B,CACzC,MAAc,EACd,MAAqB,EACrB,KAAa;IAEb,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,OAAO,CAAC,CAAC;IACrF,OAAO;QACL,KAAK;QACL,GAAG;QACH,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC;QAC/C,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,oBAAoB,CAAC;QACrD,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC;QAC3C,oBAAoB,EAAE,IAAI,CAAC,GAAG,EAAE,sBAAsB,CAAC;QACvD,cAAc,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC1C,aAAa,EAAE,IAAI,CAAC,OAAO,EAAE,gBAAgB,CAAC;QAC9C,iBAAiB,EAAE,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC;QACtD,cAAc,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC;QACtG,mBAAmB,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,uBAAuB,CAAC;QAClH,2BAA2B,EAAE,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,EAAE,cAAc,CAAC,EAAE,SAAS,EAAE,qBAAqB,CAAC;KACzH,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,SAA+B;IAC7D,OAAO,OAAO,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE;IAC9C,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { type SourceEntry } from "./config.js";
2
+ import { type PrepareSyncOptions, type PrepareSyncResult } from "./source-snapshot-adapters.js";
3
+ export declare const PREPARE_RESOURCE_CATEGORIES: readonly ["repo-context", "docs", "decision-records", "issue-tracker", "external-docs"];
4
+ export type PrepareResourceCategory = typeof PREPARE_RESOURCE_CATEGORIES[number];
5
+ export declare const PREPARE_CONSUMER_REQUIREMENTS: Record<string, PrepareResourceCategory[]>;
6
+ export type PrepareReadinessStatus = "available" | "stale" | "missing" | "failed" | "skipped";
7
+ export type PrepareReadinessRow = {
8
+ sourceKey: string;
9
+ sourcePath: string;
10
+ rawLane?: string;
11
+ area?: string;
12
+ provider?: string;
13
+ category: PrepareResourceCategory;
14
+ consumers: string[];
15
+ selected: boolean;
16
+ status: PrepareReadinessStatus;
17
+ syncStatus?: PrepareSyncResult["status"];
18
+ snapshot?: string;
19
+ changed?: boolean;
20
+ reason: string;
21
+ retry: string;
22
+ impact: string;
23
+ };
24
+ export type PrepareReadinessMatrix = {
25
+ version: 1;
26
+ generatedAt: string;
27
+ selector: {
28
+ source?: string;
29
+ resource?: string;
30
+ lane?: string;
31
+ consumer?: string;
32
+ all?: boolean;
33
+ };
34
+ summary: Record<PrepareReadinessStatus, number>;
35
+ rows: PrepareReadinessRow[];
36
+ };
37
+ export declare function selectPrepareEntries(entries: SourceEntry[], opts: PrepareSyncOptions): SourceEntry[];
38
+ export declare function buildPrepareReadinessMatrix(entries: SourceEntry[], results: PrepareSyncResult[], opts: PrepareSyncOptions, now?: Date): PrepareReadinessMatrix;
39
+ export declare function renderPrepareReadinessMatrix(matrix: PrepareReadinessMatrix): string;
40
+ export declare function classifyPrepareEntry(entry: SourceEntry): PrepareResourceCategory;