@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,298 @@
1
+ import { evaluateTaskDecomposition, } from "./task-decomposition.js";
2
+ const TARGET_SCORE = 100;
3
+ const SIDE_EFFECT_FIELDS = new Set([
4
+ "issuePath",
5
+ "publish",
6
+ "writeIssue",
7
+ "gate",
8
+ "dispatch",
9
+ "agent",
10
+ "nextSkill",
11
+ "workflowNext",
12
+ "route",
13
+ "staffing",
14
+ ]);
15
+ const PRIORITY_ORDER = {
16
+ P0: 0,
17
+ P1: 1,
18
+ P2: 2,
19
+ P3: 3,
20
+ };
21
+ export function createTaskPlan(decomposition) {
22
+ const assessment = evaluateTaskDecomposition(decomposition);
23
+ const taskGroups = Array.from(groupCandidates(decomposition.candidates).entries()).map(([groupTitle, candidates]) => {
24
+ const workMode = candidates.some((candidate) => candidate.workMode === "HITL")
25
+ ? "HITL"
26
+ : "AFK";
27
+ return {
28
+ id: slugify(groupTitle),
29
+ title: groupTitle,
30
+ priority: highestPriority(candidates),
31
+ workMode,
32
+ verticalSlices: candidates.map(toVerticalSlice),
33
+ };
34
+ });
35
+ return {
36
+ version: 1,
37
+ kind: "task-plan",
38
+ sourceEngine: "task-decomposition",
39
+ source: decomposition.source,
40
+ assessment,
41
+ localSideEffects: "none",
42
+ workflowSideEffects: [],
43
+ taskGroups,
44
+ boundedSpikes: decomposition.candidates
45
+ .filter((candidate) => candidate.type === "spike")
46
+ .map(toBoundedSpike),
47
+ };
48
+ }
49
+ export function evaluateTaskPlan(plan) {
50
+ const diagnostics = [
51
+ ...diagnosePlanShape(plan),
52
+ ...diagnoseTaskGroups(plan),
53
+ ...diagnoseSideEffects(plan),
54
+ ...diagnoseBoundedSpikes(plan),
55
+ ];
56
+ const status = diagnostics.some((diagnostic) => diagnostic.severity === "failure")
57
+ ? "invalid"
58
+ : diagnostics.length > 0
59
+ ? "warning"
60
+ : "valid";
61
+ return {
62
+ status,
63
+ targetScore: TARGET_SCORE,
64
+ score: scoreDiagnostics(diagnostics),
65
+ diagnostics,
66
+ };
67
+ }
68
+ function groupCandidates(candidates) {
69
+ const groups = new Map();
70
+ for (const candidate of candidates) {
71
+ const existing = groups.get(candidate.group) ?? [];
72
+ existing.push(candidate);
73
+ groups.set(candidate.group, existing);
74
+ }
75
+ return groups;
76
+ }
77
+ function toVerticalSlice(candidate) {
78
+ return {
79
+ id: candidate.id,
80
+ title: candidate.title,
81
+ priority: candidate.priority,
82
+ type: candidate.type,
83
+ workMode: candidate.workMode,
84
+ hitlReason: candidate.hitlReason,
85
+ blockedBy: [...candidate.blockedBy],
86
+ unblocks: [...candidate.unblocks],
87
+ acceptanceCriteria: [...candidate.acceptanceCriteria],
88
+ todo: [...candidate.todo],
89
+ checkpoints: { ...candidate.checkpoints },
90
+ validation: [...candidate.validation],
91
+ sourceRefs: [...(candidate.sourceRefs ?? [])],
92
+ };
93
+ }
94
+ function toBoundedSpike(candidate) {
95
+ return {
96
+ candidateId: candidate.id,
97
+ timebox: "30m",
98
+ problem: candidate.title,
99
+ output: "A minimal vertical-slice task list or explicit blocker that can be reviewed without further exploration.",
100
+ acceptanceCriteria: [...candidate.acceptanceCriteria],
101
+ };
102
+ }
103
+ function highestPriority(candidates) {
104
+ return candidates.reduce((highest, candidate) => {
105
+ return PRIORITY_ORDER[candidate.priority] < PRIORITY_ORDER[highest] ? candidate.priority : highest;
106
+ }, "P3");
107
+ }
108
+ function diagnosePlanShape(plan) {
109
+ const diagnostics = [];
110
+ if (plan.version !== 1 || plan.kind !== "task-plan") {
111
+ diagnostics.push(diagnostic({
112
+ code: "invalid-task-plan-shape",
113
+ severity: "failure",
114
+ message: "Task plan artifact must use version 1 and kind task-plan.",
115
+ evidence: [String(plan.version), String(plan.kind)],
116
+ }));
117
+ }
118
+ if (plan.sourceEngine !== "task-decomposition") {
119
+ diagnostics.push(diagnostic({
120
+ code: "missing-shared-decomposition-source",
121
+ severity: "failure",
122
+ message: "Task plan artifact must be derived from the shared task decomposition engine.",
123
+ evidence: [String(plan.sourceEngine)],
124
+ }));
125
+ }
126
+ if (!plan.source?.kind) {
127
+ diagnostics.push(diagnostic({
128
+ code: "missing-task-plan-source",
129
+ severity: "failure",
130
+ message: "Task plan artifact must preserve the decomposition source kind.",
131
+ evidence: [],
132
+ }));
133
+ }
134
+ if (!plan.assessment || plan.assessment.status === "invalid") {
135
+ diagnostics.push(diagnostic({
136
+ code: "invalid-task-decomposition-assessment",
137
+ severity: "failure",
138
+ message: "Task plan artifact must preserve a non-invalid shared decomposition assessment.",
139
+ evidence: plan.assessment ? [plan.assessment.status] : [],
140
+ }));
141
+ }
142
+ if (!Array.isArray(plan.taskGroups) || plan.taskGroups.length === 0) {
143
+ diagnostics.push(diagnostic({
144
+ code: "missing-task-plan-fields",
145
+ severity: "failure",
146
+ message: "Task plan artifact must include at least one task group.",
147
+ evidence: [],
148
+ }));
149
+ }
150
+ if (plan.localSideEffects !== "none") {
151
+ diagnostics.push(diagnostic({
152
+ code: "local-side-effect",
153
+ severity: "failure",
154
+ message: "Task plan adapter must not write issue markdown or other local workflow artifacts by default.",
155
+ evidence: [String(plan.localSideEffects)],
156
+ }));
157
+ }
158
+ if (!Array.isArray(plan.workflowSideEffects) || plan.workflowSideEffects.length > 0) {
159
+ diagnostics.push(diagnostic({
160
+ code: "workflow-side-effect",
161
+ severity: "failure",
162
+ message: "Task plan adapter must not execute gate, staffing, issue publishing, dispatch, or workflow routing.",
163
+ evidence: Array.isArray(plan.workflowSideEffects) ? plan.workflowSideEffects.map(String) : [],
164
+ }));
165
+ }
166
+ return diagnostics;
167
+ }
168
+ function diagnoseTaskGroups(plan) {
169
+ if (!Array.isArray(plan.taskGroups))
170
+ return [];
171
+ return plan.taskGroups.flatMap((group) => {
172
+ const diagnostics = [];
173
+ if (!group.id || !group.title || !group.priority || !group.workMode || !Array.isArray(group.verticalSlices)) {
174
+ diagnostics.push(groupDiagnostic(group, "missing-task-plan-fields", "failure", "Task group is missing required fields.", []));
175
+ }
176
+ for (const slice of group.verticalSlices ?? []) {
177
+ diagnostics.push(...diagnoseVerticalSlice(group, slice));
178
+ }
179
+ return diagnostics;
180
+ });
181
+ }
182
+ function diagnoseVerticalSlice(group, slice) {
183
+ const diagnostics = [];
184
+ const missingRequired = !slice.id ||
185
+ !slice.title ||
186
+ !slice.priority ||
187
+ !slice.type ||
188
+ !slice.workMode ||
189
+ !Array.isArray(slice.blockedBy) ||
190
+ !Array.isArray(slice.unblocks) ||
191
+ !Array.isArray(slice.acceptanceCriteria) ||
192
+ slice.acceptanceCriteria.length === 0 ||
193
+ !Array.isArray(slice.todo) ||
194
+ slice.todo.length === 0 ||
195
+ !slice.checkpoints?.ready ||
196
+ !slice.checkpoints.green ||
197
+ !slice.checkpoints.review ||
198
+ !slice.checkpoints.verify ||
199
+ !Array.isArray(slice.validation) ||
200
+ slice.validation.length === 0;
201
+ if (missingRequired) {
202
+ diagnostics.push(sliceDiagnostic(group, slice, "missing-task-plan-fields", "failure", "Vertical slice is missing executable task plan fields.", []));
203
+ }
204
+ if (slice.workMode === "HITL" && !slice.hitlReason) {
205
+ diagnostics.push(sliceDiagnostic(group, slice, "missing-hitl-reason", "failure", "HITL vertical slices must preserve the bounded human-in-loop reason.", []));
206
+ }
207
+ return diagnostics;
208
+ }
209
+ function diagnoseSideEffects(plan) {
210
+ const diagnostics = [];
211
+ for (const field of Object.keys(plan)) {
212
+ if (SIDE_EFFECT_FIELDS.has(field)) {
213
+ diagnostics.push(diagnostic({
214
+ code: "workflow-side-effect",
215
+ severity: "failure",
216
+ message: `Task plan artifact must not include workflow side-effect field ${field}.`,
217
+ evidence: [field],
218
+ }));
219
+ }
220
+ }
221
+ if (!Array.isArray(plan.taskGroups))
222
+ return diagnostics;
223
+ for (const group of plan.taskGroups) {
224
+ for (const field of Object.keys(group)) {
225
+ if (SIDE_EFFECT_FIELDS.has(field)) {
226
+ diagnostics.push(groupDiagnostic(group, "workflow-side-effect", "failure", `Task group must not include workflow side-effect field ${field}.`, [field]));
227
+ }
228
+ }
229
+ for (const slice of group.verticalSlices ?? []) {
230
+ for (const field of Object.keys(slice)) {
231
+ if (SIDE_EFFECT_FIELDS.has(field)) {
232
+ diagnostics.push(sliceDiagnostic(group, slice, "workflow-side-effect", "failure", `Vertical slice must not include workflow side-effect field ${field}.`, [field]));
233
+ }
234
+ }
235
+ }
236
+ }
237
+ return diagnostics;
238
+ }
239
+ function diagnoseBoundedSpikes(plan) {
240
+ if (!Array.isArray(plan.boundedSpikes))
241
+ return [];
242
+ return plan.boundedSpikes.flatMap((spike) => {
243
+ if (spike.timebox === "30m" &&
244
+ spike.problem?.trim() &&
245
+ spike.output?.trim() &&
246
+ Array.isArray(spike.acceptanceCriteria) &&
247
+ spike.acceptanceCriteria.length > 0) {
248
+ return [];
249
+ }
250
+ return [
251
+ diagnostic({
252
+ code: "invalid-bounded-spike",
253
+ severity: "failure",
254
+ message: "Bounded spike must include timebox, problem, output, and acceptance criteria.",
255
+ evidence: [spike.candidateId],
256
+ }),
257
+ ];
258
+ });
259
+ }
260
+ function scoreDiagnostics(diagnostics) {
261
+ const penalty = diagnostics.reduce((total, diagnostic) => {
262
+ return total + (diagnostic.severity === "failure" ? 20 : 10);
263
+ }, 0);
264
+ return Math.max(0, TARGET_SCORE - penalty);
265
+ }
266
+ function slugify(value) {
267
+ return value
268
+ .trim()
269
+ .toLowerCase()
270
+ .replace(/[^a-z0-9]+/g, "-")
271
+ .replace(/^-+|-+$/g, "") || "task-group";
272
+ }
273
+ function diagnostic(input) {
274
+ return {
275
+ evidence: [],
276
+ ...input,
277
+ };
278
+ }
279
+ function groupDiagnostic(group, code, severity, message, evidence) {
280
+ return diagnostic({
281
+ code,
282
+ severity,
283
+ groupId: group.id,
284
+ message,
285
+ evidence,
286
+ });
287
+ }
288
+ function sliceDiagnostic(group, slice, code, severity, message, evidence) {
289
+ return diagnostic({
290
+ code,
291
+ severity,
292
+ groupId: group.id,
293
+ sliceId: slice.id,
294
+ message,
295
+ evidence,
296
+ });
297
+ }
298
+ //# sourceMappingURL=task-plan-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-plan-adapter.js","sourceRoot":"","sources":["../../src/core/task-plan-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ export type ValidationEvidenceKind = "unit" | "integration" | "smoke" | "manual" | "static" | "review";
2
+ export type ValidationEvidenceStatus = "pass" | "fail" | "skipped";
3
+ export type ContractTier = "intrinsic-engineering" | "contextual-spec-design-task" | "workflow-governance";
4
+ export type ValidationPacket = {
5
+ version: 1;
6
+ mode?: "direct" | "governed" | "strict";
7
+ change?: {
8
+ kind: "feature" | "bugfix" | "refactor" | "mechanical";
9
+ summary?: string;
10
+ noRedReason?: string;
11
+ };
12
+ contractTiers?: ValidationContractTiers;
13
+ implementationLoop?: ValidationImplementationLoop;
14
+ acceptanceCriteria: ValidationAcceptanceCriterion[];
15
+ evidence: ValidationEvidence[];
16
+ mockBoundary?: ValidationMockBoundary;
17
+ qualitySignals?: ValidationQualitySignals;
18
+ };
19
+ export type ValidationContractTiers = {
20
+ intrinsicEngineering: string[];
21
+ contextualSpecDesignTask: string[];
22
+ workflowGovernance: string[];
23
+ };
24
+ export type ValidationImplementationLoop = {
25
+ strategy: "tdd" | "tracer-bullet" | "focused-validation";
26
+ cycles: ValidationImplementationCycle[];
27
+ };
28
+ export type ValidationImplementationCycle = {
29
+ behavior: string;
30
+ sourceId?: string;
31
+ redEvidence?: string;
32
+ greenEvidence?: string;
33
+ refactorEvidence?: string;
34
+ noRedReason?: string;
35
+ changedFiles?: string[];
36
+ };
37
+ export type ValidationAcceptanceCriterion = {
38
+ id: string;
39
+ description: string;
40
+ evidence: string[];
41
+ };
42
+ export type ValidationEvidence = {
43
+ id: string;
44
+ kind: ValidationEvidenceKind;
45
+ status: ValidationEvidenceStatus;
46
+ behavior: string;
47
+ covers?: string[];
48
+ exercises?: string[];
49
+ mocked?: string[];
50
+ assertion?: "behavior" | "implementation";
51
+ red?: boolean;
52
+ negative?: boolean;
53
+ };
54
+ export type ValidationMockBoundary = {
55
+ mocked: string[];
56
+ real: string[];
57
+ integrationRequired: string[];
58
+ };
59
+ export type ValidationQualitySignals = {
60
+ placeholders?: string[];
61
+ hacks?: string[];
62
+ broadRefactor?: boolean;
63
+ styleIssues?: string[];
64
+ typeIssues?: string[];
65
+ errorHandlingGaps?: string[];
66
+ scopeViolations?: string[];
67
+ contractViolations?: string[];
68
+ };
69
+ export type ValidationDiagnosticSeverity = "warning" | "failure";
70
+ export type ValidationDiagnostic = {
71
+ code: string;
72
+ severity: ValidationDiagnosticSeverity;
73
+ tier: ContractTier;
74
+ message: string;
75
+ evidence: string[];
76
+ };
77
+ export type ValidationAssessment = {
78
+ status: "trusted" | "warning" | "untrusted";
79
+ targetScore: 100;
80
+ score: number;
81
+ confidence: "high" | "medium" | "low";
82
+ nextActions: string[];
83
+ diagnostics: ValidationDiagnostic[];
84
+ };
85
+ export declare function evaluateValidationPacket(packet: ValidationPacket): ValidationAssessment;
86
+ export declare function formatValidationPacketForPullRequest(packet: ValidationPacket): string;