@captain_z/zsk 1.8.3 → 1.8.5

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 (143) hide show
  1. package/dist/bin.js +13 -0
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/add-flow.d.ts +3 -7
  4. package/dist/commands/add-flow.js +7 -59
  5. package/dist/commands/add-flow.js.map +1 -1
  6. package/dist/commands/add.js +25 -104
  7. package/dist/commands/add.js.map +1 -1
  8. package/dist/commands/check.js +14 -575
  9. package/dist/commands/check.js.map +1 -1
  10. package/dist/commands/config.js +1 -1
  11. package/dist/commands/config.js.map +1 -1
  12. package/dist/commands/demo.d.ts +5 -0
  13. package/dist/commands/demo.js +70 -297
  14. package/dist/commands/demo.js.map +1 -1
  15. package/dist/commands/doctor.js +9 -4
  16. package/dist/commands/doctor.js.map +1 -1
  17. package/dist/commands/gate.d.ts +1 -0
  18. package/dist/commands/gate.js +8 -2
  19. package/dist/commands/gate.js.map +1 -1
  20. package/dist/commands/prepare.js +7 -1
  21. package/dist/commands/prepare.js.map +1 -1
  22. package/dist/commands/project-init.js +30 -8
  23. package/dist/commands/project-init.js.map +1 -1
  24. package/dist/core/config.d.ts +68 -0
  25. package/dist/core/config.js +198 -15
  26. package/dist/core/config.js.map +1 -1
  27. package/dist/core/demo-auth.d.ts +30 -0
  28. package/dist/core/demo-auth.js +213 -0
  29. package/dist/core/demo-auth.js.map +1 -0
  30. package/dist/core/demo-scenarios.d.ts +62 -0
  31. package/dist/core/demo-scenarios.js +276 -0
  32. package/dist/core/demo-scenarios.js.map +1 -0
  33. package/dist/core/demo-sources.d.ts +37 -0
  34. package/dist/core/demo-sources.js +198 -0
  35. package/dist/core/demo-sources.js.map +1 -0
  36. package/dist/core/mcp-registry-discovery.d.ts +16 -0
  37. package/dist/core/mcp-registry-discovery.js +187 -0
  38. package/dist/core/mcp-registry-discovery.js.map +1 -0
  39. package/dist/core/origin-detection.js +1 -1
  40. package/dist/core/origin-detection.js.map +1 -1
  41. package/dist/core/prepare-artifacts.d.ts +16 -0
  42. package/dist/core/prepare-artifacts.js +25 -0
  43. package/dist/core/prepare-artifacts.js.map +1 -0
  44. package/dist/core/prepare-auth-helper.d.ts +8 -0
  45. package/dist/core/prepare-auth-helper.js +32 -0
  46. package/dist/core/prepare-auth-helper.js.map +1 -0
  47. package/dist/core/prepare-materialization.d.ts +8 -0
  48. package/dist/core/prepare-materialization.js +26 -0
  49. package/dist/core/prepare-materialization.js.map +1 -0
  50. package/dist/core/prepare-migration.d.ts +6 -0
  51. package/dist/core/prepare-migration.js +57 -0
  52. package/dist/core/prepare-migration.js.map +1 -0
  53. package/dist/core/prepare-reporting.d.ts +5 -0
  54. package/dist/core/prepare-reporting.js +106 -0
  55. package/dist/core/prepare-reporting.js.map +1 -0
  56. package/dist/core/prepare-routing.d.ts +12 -0
  57. package/dist/core/prepare-routing.js +182 -0
  58. package/dist/core/prepare-routing.js.map +1 -0
  59. package/dist/core/prepare-sync.d.ts +13 -53
  60. package/dist/core/prepare-sync.js +878 -359
  61. package/dist/core/prepare-sync.js.map +1 -1
  62. package/dist/core/prepare-utils.d.ts +6 -0
  63. package/dist/core/prepare-utils.js +35 -0
  64. package/dist/core/prepare-utils.js.map +1 -0
  65. package/dist/core/profile-bundle-installation.d.ts +55 -0
  66. package/dist/core/profile-bundle-installation.js +170 -0
  67. package/dist/core/profile-bundle-installation.js.map +1 -0
  68. package/dist/core/provider-policy.d.ts +26 -0
  69. package/dist/core/provider-policy.js +180 -0
  70. package/dist/core/provider-policy.js.map +1 -0
  71. package/dist/core/provider-readiness.d.ts +39 -0
  72. package/dist/core/provider-readiness.js +78 -0
  73. package/dist/core/provider-readiness.js.map +1 -0
  74. package/dist/core/source-adapter-normalization.d.ts +31 -0
  75. package/dist/core/source-adapter-normalization.js +235 -0
  76. package/dist/core/source-adapter-normalization.js.map +1 -0
  77. package/dist/core/source-snapshot-adapters.d.ts +59 -0
  78. package/dist/core/source-snapshot-adapters.js +60 -0
  79. package/dist/core/source-snapshot-adapters.js.map +1 -0
  80. package/dist/core/staffing-plan.d.ts +1 -0
  81. package/dist/core/staffing-plan.js +113 -21
  82. package/dist/core/staffing-plan.js.map +1 -1
  83. package/dist/core/stage-clarity-verification.d.ts +31 -0
  84. package/dist/core/stage-clarity-verification.js +316 -0
  85. package/dist/core/stage-clarity-verification.js.map +1 -0
  86. package/dist/core/stage-output-quality.d.ts +3 -0
  87. package/dist/core/stage-output-quality.js +122 -0
  88. package/dist/core/stage-output-quality.js.map +1 -0
  89. package/dist/core/stage-quality-artifacts.d.ts +15 -0
  90. package/dist/core/stage-quality-artifacts.js +421 -0
  91. package/dist/core/stage-quality-artifacts.js.map +1 -0
  92. package/dist/core/stage-quality-contracts.d.ts +105 -0
  93. package/dist/core/stage-quality-contracts.js +2 -0
  94. package/dist/core/stage-quality-contracts.js.map +1 -0
  95. package/dist/core/stage-quality-criteria.d.ts +9 -0
  96. package/dist/core/stage-quality-criteria.js +286 -0
  97. package/dist/core/stage-quality-criteria.js.map +1 -0
  98. package/dist/core/stage-quality-rendering.d.ts +15 -0
  99. package/dist/core/stage-quality-rendering.js +240 -0
  100. package/dist/core/stage-quality-rendering.js.map +1 -0
  101. package/dist/core/stage-quality.d.ts +4 -59
  102. package/dist/core/stage-quality.js +54 -795
  103. package/dist/core/stage-quality.js.map +1 -1
  104. package/dist/core/template-registry.js +12 -15
  105. package/dist/core/template-registry.js.map +1 -1
  106. package/dist/core/workspace-conformance.d.ts +39 -0
  107. package/dist/core/workspace-conformance.js +603 -0
  108. package/dist/core/workspace-conformance.js.map +1 -0
  109. package/package.json +2 -2
  110. package/schemas/providers.schema.json +74 -0
  111. package/schemas/zsk-config.schema.json +417 -1
  112. package/templates/module/frontend-module/design.md +10 -0
  113. package/templates/module/frontend-module/proposal.md +8 -0
  114. package/templates/module/frontend-module/spec.md +7 -0
  115. package/templates/project-init/.zsk/README.md +48 -0
  116. package/templates/project-init/.zsk/config.yaml +37 -0
  117. package/templates/project-init/.zsk/docs/CONFIG-SCHEMA.md +127 -0
  118. package/templates/project-init/.zsk/docs/PROJECT-CONFIG.md +53 -5
  119. package/templates/project-init/.zsk/docs/README.md +10 -0
  120. package/templates/project-init/.zsk/docs/SECURITY.md +34 -0
  121. package/templates/project-init/.zsk/docs/SYSTEM-SPEC.md +39 -7
  122. package/templates/project-init/.zsk/evidence/README.md +15 -0
  123. package/templates/project-init/.zsk/issues/README.md +10 -0
  124. package/templates/project-init/.zsk/modules/README.md +19 -0
  125. package/templates/project-init/.zsk/modules/index.md +9 -5
  126. package/templates/project-init/.zsk/raws/README.md +34 -0
  127. package/templates/project-init/.zsk/roles.yaml +36 -105
  128. package/templates/project-init/.zsk/templates/config.examples.yaml +83 -0
  129. package/templates/project-init/.zsk/templates/issue-card.md +23 -0
  130. package/templates/project-init/.zsk/templates/module/README.md +13 -0
  131. package/templates/project-init/.zsk/templates/module/design.md +22 -0
  132. package/templates/project-init/.zsk/templates/module/module.yaml +15 -0
  133. package/templates/project-init/.zsk/templates/module/proposal.md +20 -0
  134. package/templates/project-init/.zsk/templates/module/spec.md +22 -0
  135. package/templates/project-init/.zsk/templates/module/tasks.md +16 -0
  136. package/templates/project-init/.zsk/raws/index.md +0 -18
  137. package/templates/project-init/.zsk/raws/manifest.json +0 -4
  138. package/templates/project-init/.zsk/raws/prepare/backend/index.md +0 -4
  139. package/templates/project-init/.zsk/raws/prepare/design/index.md +0 -3
  140. package/templates/project-init/.zsk/raws/prepare/index.md +0 -4
  141. package/templates/project-init/.zsk/raws/prepare/product/index.md +0 -4
  142. package/templates/project-init/.zsk/raws/prepare/qa/index.md +0 -4
  143. package/templates/project-init/.zsk/raws/prepare/ux/index.md +0 -3
@@ -0,0 +1,122 @@
1
+ const OUTPUT_QUALITY_STATUSES = new Set([
2
+ "PASS",
3
+ "NEEDS_CLARIFICATION",
4
+ "NEEDS_REPAIR",
5
+ "BLOCKED",
6
+ "WAIVED",
7
+ ]);
8
+ const STAGE_ARTIFACT_KEYS = new Set([
9
+ "proposal",
10
+ "spec",
11
+ "design",
12
+ "tasks",
13
+ "smoke",
14
+ "review",
15
+ "ready",
16
+ "verify",
17
+ "acceptance",
18
+ "archive",
19
+ ]);
20
+ export function evaluateOutputQualityChecks(artifacts, contentByKey) {
21
+ return artifacts
22
+ .filter((artifact) => artifact.exists && isStageArtifactKey(artifact.key))
23
+ .map((artifact) => parseOutputQualityCheck(artifact, contentByKey.get(artifact.key) ?? ""));
24
+ }
25
+ export function statusRank(status) {
26
+ if (status === "BLOCKED" || status === "NEEDS_REPAIR")
27
+ return 4;
28
+ if (status === "NEEDS_CLARIFICATION")
29
+ return 3;
30
+ if (status === "WAIVED")
31
+ return 2;
32
+ return 1;
33
+ }
34
+ function isStageArtifactKey(key) {
35
+ if (key.startsWith("current-"))
36
+ return true;
37
+ return STAGE_ARTIFACT_KEYS.has(key);
38
+ }
39
+ function parseOutputQualityCheck(artifact, content) {
40
+ const section = extractOutputQualitySection(content);
41
+ if (!section) {
42
+ return {
43
+ artifactKey: artifact.key,
44
+ path: artifact.path,
45
+ present: false,
46
+ valid: false,
47
+ sourceBasis: [],
48
+ blockingItems: [],
49
+ gap: "missing Output Quality Check block",
50
+ };
51
+ }
52
+ const statusValue = fieldValue(section, "status")?.toUpperCase().replace(/[\s-]+/g, "_");
53
+ const status = OUTPUT_QUALITY_STATUSES.has(statusValue)
54
+ ? statusValue
55
+ : undefined;
56
+ const sourceBasis = listField(section, "source_basis");
57
+ const blockingItems = listField(section, "blocking_items");
58
+ const nextAction = fieldValue(section, "next_action");
59
+ const owner = fieldValue(section, "owner");
60
+ const waiver = listField(section, "waiver");
61
+ const updatedAt = fieldValue(section, "updated_at");
62
+ const missingFields = [
63
+ !status ? "status" : undefined,
64
+ !owner ? "owner" : undefined,
65
+ sourceBasis.length === 0 ? "source_basis" : undefined,
66
+ !hasField(section, "blocking_items") ? "blocking_items" : undefined,
67
+ !nextAction ? "next_action" : undefined,
68
+ ].filter((value) => Boolean(value));
69
+ return {
70
+ artifactKey: artifact.key,
71
+ path: artifact.path,
72
+ present: true,
73
+ valid: missingFields.length === 0,
74
+ ...(status ? { status } : {}),
75
+ ...(owner ? { owner } : {}),
76
+ sourceBasis,
77
+ blockingItems,
78
+ ...(nextAction ? { nextAction } : {}),
79
+ ...(waiver.length > 0 ? { waiver } : {}),
80
+ ...(updatedAt ? { updatedAt } : {}),
81
+ ...(missingFields.length > 0 ? { gap: `Output Quality Check missing required field(s): ${missingFields.join(", ")}` } : {}),
82
+ };
83
+ }
84
+ function extractOutputQualitySection(content) {
85
+ const match = /(^|\n)#{2,6}\s+Output Quality Check\s*\n/i.exec(content);
86
+ if (!match)
87
+ return undefined;
88
+ const start = (match.index ?? 0) + match[0].length;
89
+ const rest = content.slice(start);
90
+ const next = /\n#{2,6}\s+/.exec(rest);
91
+ return (next ? rest.slice(0, next.index) : rest).trim();
92
+ }
93
+ function fieldValue(section, name) {
94
+ const escaped = escapeRegExp(name);
95
+ const match = new RegExp(`(^|\\n)\\s*[-*]?\\s*${escaped}\\s*:\\s*(.+)`, "i").exec(section);
96
+ return match?.[2] ? cleanScalar(match[2]) : undefined;
97
+ }
98
+ function hasField(section, name) {
99
+ const escaped = escapeRegExp(name);
100
+ return new RegExp(`(^|\\n)\\s*[-*]?\\s*${escaped}\\s*:`, "i").test(section);
101
+ }
102
+ function listField(section, name) {
103
+ const scalar = fieldValue(section, name);
104
+ if (scalar && !["none", "n/a", "[]"].includes(scalar.toLowerCase()))
105
+ return [scalar];
106
+ const escaped = escapeRegExp(name);
107
+ const match = new RegExp(`(^|\\n)\\s*[-*]?\\s*${escaped}\\s*:\\s*\\n(?<body>(?:\\s{2,}[-*].+\\n?)+)`, "i").exec(section);
108
+ const body = match?.groups?.body;
109
+ if (!body)
110
+ return scalar ? [scalar] : [];
111
+ return body
112
+ .split(/\r?\n/)
113
+ .map((line) => cleanScalar(line.replace(/^\s*[-*]\s*/, "")))
114
+ .filter(Boolean);
115
+ }
116
+ function cleanScalar(value) {
117
+ return value.trim().replace(/^`|`$/g, "").trim();
118
+ }
119
+ function escapeRegExp(value) {
120
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
121
+ }
122
+ //# sourceMappingURL=stage-output-quality.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-output-quality.js","sourceRoot":"","sources":["../../src/core/stage-output-quality.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ProjectConfig } from "./config.js";
2
+ import type { GateArtifact, ReviewGateMode } from "./stage-quality-contracts.js";
3
+ export declare function listStageQualityInputStages(): string[];
4
+ export declare function resolveStageQualityModuleId(target: string, config: ProjectConfig, stage: string, requested: string | undefined): Promise<string | undefined>;
5
+ export declare function readStageQualityArtifacts(request: {
6
+ target: string;
7
+ config: ProjectConfig;
8
+ stage: string;
9
+ moduleId: string | undefined;
10
+ issue: string | undefined;
11
+ reviewTarget: string | undefined;
12
+ }): Promise<GateArtifact[]>;
13
+ export declare function readStageQualityArtifactContents(target: string, artifacts: GateArtifact[]): Promise<Map<string, string>>;
14
+ export declare function normalizeReviewTargetPath(target: string, value: string | undefined): string | undefined;
15
+ export declare function reviewModeForReviewTarget(reviewTarget: string | undefined): ReviewGateMode | undefined;
@@ -0,0 +1,421 @@
1
+ import { existsSync } from "node:fs";
2
+ import { readFile, readdir, stat } from "node:fs/promises";
3
+ import { basename, dirname, extname, join, relative, resolve } from "node:path";
4
+ import { getWorkspacePath } from "./workspace-layout.js";
5
+ const MODULE_STAGES = new Set(["proposal", "spec", "design", "task", "coding", "fix", "smoke", "review", "ready", "verify", "acceptance", "archive"]);
6
+ const SPLITTABLE_MODULE_STAGES = new Set(["proposal", "spec", "design", "tasks"]);
7
+ const SKIPPED_REVIEW_TARGET_DIRS = new Set([
8
+ ".auth",
9
+ ".cache",
10
+ ".git",
11
+ ".next",
12
+ ".turbo",
13
+ "coverage",
14
+ "dist",
15
+ "node_modules",
16
+ ]);
17
+ const STAGE_INPUTS = {
18
+ prepare: [
19
+ { key: "project-config", path: (config) => getWorkspacePath(config, "projectConfig") },
20
+ { key: "system-spec", path: (config) => getWorkspacePath(config, "systemSpec") },
21
+ ],
22
+ preproposal: [],
23
+ proposal: [
24
+ { key: "project-config", path: (config) => getWorkspacePath(config, "projectConfig") },
25
+ { key: "system-spec", path: (config) => getWorkspacePath(config, "systemSpec") },
26
+ { key: "raw-manifest", path: (config) => getWorkspacePath(config, "rawsManifest") },
27
+ ],
28
+ spec: [
29
+ { key: "project-config", path: (config) => getWorkspacePath(config, "projectConfig") },
30
+ { key: "system-spec", path: (config) => getWorkspacePath(config, "systemSpec") },
31
+ { key: "proposal", moduleStage: "proposal" },
32
+ ],
33
+ design: [
34
+ { key: "project-config", path: (config) => getWorkspacePath(config, "projectConfig") },
35
+ { key: "system-spec", path: (config) => getWorkspacePath(config, "systemSpec") },
36
+ { key: "spec", moduleStage: "spec" },
37
+ ],
38
+ task: [
39
+ { key: "project-config", path: (config) => getWorkspacePath(config, "projectConfig") },
40
+ { key: "system-spec", path: (config) => getWorkspacePath(config, "systemSpec") },
41
+ { key: "proposal", moduleStage: "proposal" },
42
+ { key: "spec", moduleStage: "spec" },
43
+ { key: "design", moduleStage: "design" },
44
+ ],
45
+ coding: [
46
+ { key: "tasks", moduleStage: "tasks" },
47
+ ],
48
+ fix: [],
49
+ smoke: [
50
+ { key: "tasks", moduleStage: "tasks" },
51
+ ],
52
+ review: [
53
+ { key: "spec", moduleStage: "spec" },
54
+ { key: "design", moduleStage: "design" },
55
+ { key: "tasks", moduleStage: "tasks" },
56
+ { key: "smoke", moduleStage: "smoke" },
57
+ ],
58
+ ready: [
59
+ { key: "review", moduleStage: "review" },
60
+ ],
61
+ verify: [
62
+ { key: "ready", moduleStage: "ready" },
63
+ ],
64
+ acceptance: [
65
+ { key: "verify", moduleStage: "verify" },
66
+ ],
67
+ archive: [
68
+ { key: "acceptance", moduleStage: "acceptance" },
69
+ ],
70
+ };
71
+ const CURRENT_STAGE_ARTIFACTS = {
72
+ proposal: "proposal",
73
+ spec: "spec",
74
+ design: "design",
75
+ task: "tasks",
76
+ };
77
+ export function listStageQualityInputStages() {
78
+ return Object.keys(STAGE_INPUTS);
79
+ }
80
+ export async function resolveStageQualityModuleId(target, config, stage, requested) {
81
+ if (!MODULE_STAGES.has(stage))
82
+ return undefined;
83
+ if (requested)
84
+ return requested;
85
+ const modulesRoot = resolve(target, getWorkspacePath(config, "modulesRoot"));
86
+ try {
87
+ const entries = (await readdir(modulesRoot, { withFileTypes: true }))
88
+ .filter((entry) => entry.isDirectory() && !entry.name.startsWith("_"))
89
+ .map((entry) => entry.name);
90
+ if (entries.length === 1)
91
+ return entries[0];
92
+ }
93
+ catch {
94
+ // Missing modules root is handled as missing artifacts by the assessment.
95
+ }
96
+ return undefined;
97
+ }
98
+ export async function readStageQualityArtifacts(request) {
99
+ const { target, config, stage, moduleId, issue, reviewTarget } = request;
100
+ if (stage === "fix")
101
+ return readFixGateArtifacts(target, config, moduleId, issue);
102
+ if (stage === "review" && reviewTarget)
103
+ return [await readPathArtifact(target, "review-target", reviewTarget)];
104
+ const specs = STAGE_INPUTS[stage] ?? [];
105
+ const artifacts = [];
106
+ for (const spec of specs) {
107
+ if (spec.moduleStage) {
108
+ artifacts.push(await readModuleStageArtifact(target, config, spec.key, spec.moduleStage, moduleId));
109
+ continue;
110
+ }
111
+ const path = spec.path?.(config, moduleId);
112
+ if (!path) {
113
+ artifacts.push({ key: spec.key, path: "<module-required>", exists: false, bytes: 0 });
114
+ continue;
115
+ }
116
+ const abs = resolve(target, path);
117
+ const exists = existsSync(abs);
118
+ artifacts.push({
119
+ key: spec.key,
120
+ path,
121
+ exists,
122
+ bytes: exists ? Buffer.byteLength(await readFile(abs, "utf8")) : 0,
123
+ });
124
+ }
125
+ const currentStage = CURRENT_STAGE_ARTIFACTS[stage];
126
+ if (currentStage) {
127
+ const currentArtifact = await readModuleStageArtifact(target, config, `current-${stage}`, currentStage, moduleId);
128
+ if (currentArtifact.exists)
129
+ artifacts.push(currentArtifact);
130
+ }
131
+ return artifacts;
132
+ }
133
+ export async function readStageQualityArtifactContents(target, artifacts) {
134
+ const contentByKey = new Map();
135
+ for (const artifact of artifacts) {
136
+ if (!artifact.exists)
137
+ continue;
138
+ contentByKey.set(artifact.key, await readGateArtifactContent(target, artifact));
139
+ }
140
+ return contentByKey;
141
+ }
142
+ async function readPathArtifact(target, key, path) {
143
+ const boundary = resolve(target);
144
+ const abs = resolve(boundary, path);
145
+ if (!isInsidePath(boundary, abs))
146
+ throw new Error(`review target must stay under project root: ${path}`);
147
+ try {
148
+ const info = await stat(abs);
149
+ if (info.isFile()) {
150
+ return { key, path, exists: true, bytes: Buffer.byteLength(await readFile(abs, "utf8")) };
151
+ }
152
+ if (info.isDirectory()) {
153
+ const directoryContent = await readReviewTargetDirectoryContent(target, abs);
154
+ return {
155
+ key,
156
+ path,
157
+ exists: true,
158
+ bytes: Buffer.byteLength(directoryContent.content),
159
+ children: directoryContent.children,
160
+ };
161
+ }
162
+ }
163
+ catch {
164
+ // Missing paths are reported as missing artifacts by the assessment.
165
+ }
166
+ return { key, path, exists: false, bytes: 0 };
167
+ }
168
+ async function readModuleStageArtifact(target, config, key, stage, moduleId) {
169
+ const path = moduleStagePath(config, stage, moduleId);
170
+ if (!path)
171
+ return { key, path: "<module-required>", exists: false, bytes: 0 };
172
+ const abs = resolve(target, path);
173
+ try {
174
+ const info = await stat(abs);
175
+ if (info.isFile()) {
176
+ return { key, path, exists: true, bytes: Buffer.byteLength(await readFile(abs, "utf8")) };
177
+ }
178
+ }
179
+ catch {
180
+ // Fall through to stage-directory lookup for splittable artifacts.
181
+ }
182
+ if (!SPLITTABLE_MODULE_STAGES.has(stage)) {
183
+ return { key, path, exists: false, bytes: 0 };
184
+ }
185
+ const indexPath = moduleStageIndexPath(config, stage, moduleId);
186
+ if (!indexPath)
187
+ return { key, path, exists: false, bytes: 0 };
188
+ const indexAbs = resolve(target, indexPath);
189
+ try {
190
+ const info = await stat(indexAbs);
191
+ if (!info.isFile())
192
+ return { key, path: indexPath, exists: false, bytes: 0 };
193
+ const content = await readStageDirectoryContent(indexAbs);
194
+ return { key, path: indexPath, exists: true, bytes: Buffer.byteLength(content) };
195
+ }
196
+ catch {
197
+ return { key, path, exists: false, bytes: 0 };
198
+ }
199
+ }
200
+ async function readFixGateArtifacts(target, config, moduleId, issue) {
201
+ const path = await resolveIssueArtifactPath(target, config, moduleId, issue);
202
+ if (!path)
203
+ return [{ key: "issue-record", path: "<issue-required>", exists: false, bytes: 0 }];
204
+ const abs = resolve(target, path);
205
+ const exists = existsSync(abs);
206
+ return [{
207
+ key: "issue-record",
208
+ path,
209
+ exists,
210
+ bytes: exists ? Buffer.byteLength(await readFile(abs, "utf8")) : 0,
211
+ }];
212
+ }
213
+ async function resolveIssueArtifactPath(target, config, moduleId, issue) {
214
+ const value = issue?.trim();
215
+ if (!value)
216
+ return undefined;
217
+ if (looksLikeIssuePath(value))
218
+ return normalizeIssuePath(target, value);
219
+ const candidates = await collectIssueRecordCandidates(target, config, moduleId);
220
+ return candidates.find((candidate) => issueKey(candidate) === value) ??
221
+ candidates.find((candidate) => issueKey(candidate).startsWith(`${value}-`));
222
+ }
223
+ async function normalizeIssuePath(target, value) {
224
+ const abs = resolve(target, value);
225
+ try {
226
+ const info = await stat(abs);
227
+ if (info.isDirectory())
228
+ return toProjectPath(target, join(abs, "issue.md"));
229
+ }
230
+ catch {
231
+ // Missing issue paths are returned as-is so the gate can report the missing artifact.
232
+ }
233
+ if (!extname(value))
234
+ return toProjectPath(target, join(abs, "issue.md"));
235
+ return toProjectPath(target, abs);
236
+ }
237
+ async function collectIssueRecordCandidates(target, config, moduleId) {
238
+ const roots = [
239
+ ...(moduleId ? [resolve(target, getWorkspacePath(config, "moduleIssues", { module: moduleId }))] : []),
240
+ resolve(target, getWorkspacePath(config, "issuesRoot")),
241
+ resolve(target, getWorkspacePath(config, "issuesRoot"), "global"),
242
+ resolve(target, getWorkspacePath(config, "issuesRoot"), "shared"),
243
+ resolve(target, getWorkspacePath(config, "issuesRoot"), "public"),
244
+ ];
245
+ const files = [];
246
+ for (const root of roots)
247
+ files.push(...(await collectIssueFiles(root)));
248
+ return [...new Set(files.map((file) => toProjectPath(target, file)))].sort();
249
+ }
250
+ async function collectIssueFiles(root) {
251
+ try {
252
+ const entries = await readdir(root, { withFileTypes: true });
253
+ const files = [];
254
+ for (const entry of entries) {
255
+ const path = join(root, entry.name);
256
+ if (entry.isDirectory())
257
+ files.push(...(await collectIssueFiles(path)));
258
+ if (entry.isFile() && entry.name !== "index.md" && entry.name.endsWith(".md"))
259
+ files.push(path);
260
+ }
261
+ return files;
262
+ }
263
+ catch {
264
+ return [];
265
+ }
266
+ }
267
+ function looksLikeIssuePath(value) {
268
+ return value.includes("/") || value.endsWith(".md") || value.startsWith(".");
269
+ }
270
+ function issueKey(path) {
271
+ const name = basename(path);
272
+ return name === "issue.md" ? basename(dirname(path)) : name.replace(/\.md$/i, "");
273
+ }
274
+ function toProjectPath(target, path) {
275
+ return relative(target, path).split("\\").join("/");
276
+ }
277
+ function moduleStagePath(config, stage, moduleId) {
278
+ if (!moduleId)
279
+ return undefined;
280
+ return join(getWorkspacePath(config, "modulesRoot"), moduleId, `${stage}.md`);
281
+ }
282
+ function moduleStageIndexPath(config, stage, moduleId) {
283
+ if (!moduleId)
284
+ return undefined;
285
+ return join(getWorkspacePath(config, "modulesRoot"), moduleId, stage, "index.md");
286
+ }
287
+ async function readGateArtifactContent(target, artifact) {
288
+ const boundary = resolve(target);
289
+ const abs = resolve(boundary, artifact.path);
290
+ if (!isInsidePath(boundary, abs))
291
+ throw new Error(`gate artifact must stay under project root: ${artifact.path}`);
292
+ if (basename(abs) === "index.md" && SPLITTABLE_MODULE_STAGES.has(basename(dirname(abs)))) {
293
+ return readStageDirectoryContent(abs);
294
+ }
295
+ try {
296
+ const info = await stat(abs);
297
+ if (info.isDirectory())
298
+ return (await readReviewTargetDirectoryContent(target, abs)).content;
299
+ }
300
+ catch {
301
+ // The caller only asks for content after the artifact exists; fall through
302
+ // to the file read so the original error remains visible if the path races.
303
+ }
304
+ return readFile(abs, "utf8");
305
+ }
306
+ async function readReviewTargetDirectoryContent(target, dir) {
307
+ const files = await collectReviewableFiles(dir, dir);
308
+ const contents = [];
309
+ const children = [];
310
+ for (const file of files) {
311
+ const path = toProjectPath(target, file);
312
+ try {
313
+ const content = await readFile(file, "utf8");
314
+ children.push({ path, status: "included", bytes: Buffer.byteLength(content) });
315
+ contents.push(`<!-- review-target-file: ${path} -->\n${content}`);
316
+ }
317
+ catch {
318
+ children.push({ path, status: "unreadable", bytes: 0 });
319
+ }
320
+ }
321
+ return { content: contents.join("\n\n"), children };
322
+ }
323
+ async function collectReviewableFiles(root, boundary) {
324
+ try {
325
+ const entries = await readdir(root, { withFileTypes: true });
326
+ const files = [];
327
+ for (const entry of entries) {
328
+ if (shouldSkipReviewTargetEntry(entry.name))
329
+ continue;
330
+ const path = join(root, entry.name);
331
+ if (!isInsidePath(boundary, path))
332
+ continue;
333
+ if (entry.isDirectory()) {
334
+ files.push(...(await collectReviewableFiles(path, boundary)));
335
+ continue;
336
+ }
337
+ if (entry.isFile() && /\.(md|mdx|ya?ml|json|txt)$/i.test(entry.name))
338
+ files.push(path);
339
+ }
340
+ return files.sort();
341
+ }
342
+ catch {
343
+ return [];
344
+ }
345
+ }
346
+ export function normalizeReviewTargetPath(target, value) {
347
+ const trimmed = value?.trim();
348
+ if (!trimmed)
349
+ return undefined;
350
+ const boundary = resolve(target);
351
+ const abs = resolve(boundary, trimmed);
352
+ if (isInsidePath(boundary, abs))
353
+ return toProjectPath(boundary, abs) || ".";
354
+ throw new Error(`review target must stay under project root: ${trimmed}`);
355
+ }
356
+ export function reviewModeForReviewTarget(reviewTarget) {
357
+ if (!reviewTarget)
358
+ return undefined;
359
+ const path = reviewTarget.replace(/\\/g, "/");
360
+ if (path === ".zsk" || path.startsWith(".zsk/")) {
361
+ if (path.startsWith(".zsk/raws/prepare/product") ||
362
+ path.startsWith(".zsk/raws/prepare/roadmap") ||
363
+ path.startsWith(".zsk/raws/prepare/ux") ||
364
+ path.startsWith(".zsk/raws/prepare/design") ||
365
+ path.startsWith(".zsk/evidence/preproposal"))
366
+ return "preproposal";
367
+ if (path.startsWith(".zsk/raws/design/") || path.startsWith(".zsk/raws/visual/") || path.includes("/design-source"))
368
+ return "design-source";
369
+ if (path.startsWith(".zsk/raws/"))
370
+ return "raw-source";
371
+ if (/^\.zsk\/modules\/[^/]+\/(?:proposal|spec|design|tasks?)(?:\.md|\/|$)/.test(path))
372
+ return "stage-doc";
373
+ return "zsk-workspace";
374
+ }
375
+ if (/\.(?:cjs|cts|js|jsx|mjs|mts|ts|tsx|vue|svelte|css|scss|go|rs|java|kt|swift|py|rb|php|cs|cpp|c|h|hpp)$/i.test(path))
376
+ return "code-target";
377
+ if (/(?:design|figma|prototype|wireframe|mockup|screen|asset)/i.test(path))
378
+ return "design-source";
379
+ return "target-path";
380
+ }
381
+ function shouldSkipReviewTargetEntry(name) {
382
+ if (SKIPPED_REVIEW_TARGET_DIRS.has(name))
383
+ return true;
384
+ return /(?:storage-state|storagestate|cookies?|tokens?|secrets?|credentials?)\.(?:json|ya?ml|txt)$/i.test(name);
385
+ }
386
+ async function readStageDirectoryContent(indexPath) {
387
+ const indexContent = await readFile(indexPath, "utf8");
388
+ const dir = dirname(indexPath);
389
+ const linkedChildren = linkedMarkdownChildren(indexContent, dir);
390
+ const childContents = [];
391
+ for (const child of linkedChildren) {
392
+ try {
393
+ const info = await stat(child);
394
+ if (info.isFile())
395
+ childContents.push(await readFile(child, "utf8"));
396
+ }
397
+ catch {
398
+ // Missing linked children are handled by zsk check; gate content still
399
+ // relies on the index so the artifact cannot pass from hidden files.
400
+ }
401
+ }
402
+ return [indexContent, ...childContents].join("\n\n");
403
+ }
404
+ function linkedMarkdownChildren(content, dir) {
405
+ const files = new Set();
406
+ for (const match of content.matchAll(/\[[^\]]+\]\(([^)]+?\.md)(?:#[^)]+)?\)/gi)) {
407
+ const raw = match[1]?.trim();
408
+ if (!raw || /^[a-z][a-z0-9+.-]*:/i.test(raw) || raw.startsWith("/"))
409
+ continue;
410
+ const resolved = resolve(dir, raw);
411
+ if (!isInsidePath(dir, resolved) || resolved === resolve(dir, "index.md"))
412
+ continue;
413
+ files.add(resolved);
414
+ }
415
+ return [...files].sort();
416
+ }
417
+ function isInsidePath(parent, child) {
418
+ const rel = relative(parent, child);
419
+ return rel === "" || (!rel.startsWith("..") && !rel.startsWith("/") && !rel.includes("..\\"));
420
+ }
421
+ //# sourceMappingURL=stage-quality-artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-quality-artifacts.js","sourceRoot":"","sources":["../../src/core/stage-quality-artifacts.ts"],"names":[],"mappings":"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"}