@captain_z/zsk 1.8.4 → 1.8.6

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 (129) hide show
  1. package/dist/bin.js +13 -0
  2. package/dist/bin.js.map +1 -1
  3. package/dist/commands/check.js +14 -575
  4. package/dist/commands/check.js.map +1 -1
  5. package/dist/commands/config.js +4 -3
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/demo.d.ts +5 -0
  8. package/dist/commands/demo.js +70 -297
  9. package/dist/commands/demo.js.map +1 -1
  10. package/dist/commands/doctor.js +9 -4
  11. package/dist/commands/doctor.js.map +1 -1
  12. package/dist/commands/gate.d.ts +1 -0
  13. package/dist/commands/gate.js +8 -2
  14. package/dist/commands/gate.js.map +1 -1
  15. package/dist/commands/prepare.js +14 -1
  16. package/dist/commands/prepare.js.map +1 -1
  17. package/dist/commands/project-init.js +31 -8
  18. package/dist/commands/project-init.js.map +1 -1
  19. package/dist/core/config.d.ts +68 -0
  20. package/dist/core/config.js +213 -17
  21. package/dist/core/config.js.map +1 -1
  22. package/dist/core/demo-auth.d.ts +30 -0
  23. package/dist/core/demo-auth.js +213 -0
  24. package/dist/core/demo-auth.js.map +1 -0
  25. package/dist/core/demo-scenarios.d.ts +62 -0
  26. package/dist/core/demo-scenarios.js +276 -0
  27. package/dist/core/demo-scenarios.js.map +1 -0
  28. package/dist/core/demo-sources.d.ts +37 -0
  29. package/dist/core/demo-sources.js +198 -0
  30. package/dist/core/demo-sources.js.map +1 -0
  31. package/dist/core/mcp-registry-discovery.d.ts +16 -0
  32. package/dist/core/mcp-registry-discovery.js +187 -0
  33. package/dist/core/mcp-registry-discovery.js.map +1 -0
  34. package/dist/core/origin-detection.js +1 -1
  35. package/dist/core/origin-detection.js.map +1 -1
  36. package/dist/core/prepare-artifacts.d.ts +16 -0
  37. package/dist/core/prepare-artifacts.js +25 -0
  38. package/dist/core/prepare-artifacts.js.map +1 -0
  39. package/dist/core/prepare-auth-helper.d.ts +8 -0
  40. package/dist/core/prepare-auth-helper.js +32 -0
  41. package/dist/core/prepare-auth-helper.js.map +1 -0
  42. package/dist/core/prepare-lifecycle.d.ts +2 -0
  43. package/dist/core/prepare-lifecycle.js +49 -0
  44. package/dist/core/prepare-lifecycle.js.map +1 -1
  45. package/dist/core/prepare-materialization.d.ts +8 -0
  46. package/dist/core/prepare-materialization.js +26 -0
  47. package/dist/core/prepare-materialization.js.map +1 -0
  48. package/dist/core/prepare-migration.d.ts +6 -0
  49. package/dist/core/prepare-migration.js +57 -0
  50. package/dist/core/prepare-migration.js.map +1 -0
  51. package/dist/core/prepare-reporting.d.ts +5 -0
  52. package/dist/core/prepare-reporting.js +106 -0
  53. package/dist/core/prepare-reporting.js.map +1 -0
  54. package/dist/core/prepare-routing.d.ts +12 -0
  55. package/dist/core/prepare-routing.js +182 -0
  56. package/dist/core/prepare-routing.js.map +1 -0
  57. package/dist/core/prepare-sync.d.ts +11 -22
  58. package/dist/core/prepare-sync.js +811 -260
  59. package/dist/core/prepare-sync.js.map +1 -1
  60. package/dist/core/prepare-utils.d.ts +6 -0
  61. package/dist/core/prepare-utils.js +35 -0
  62. package/dist/core/prepare-utils.js.map +1 -0
  63. package/dist/core/provider-policy.d.ts +26 -0
  64. package/dist/core/provider-policy.js +180 -0
  65. package/dist/core/provider-policy.js.map +1 -0
  66. package/dist/core/provider-readiness.d.ts +39 -0
  67. package/dist/core/provider-readiness.js +78 -0
  68. package/dist/core/provider-readiness.js.map +1 -0
  69. package/dist/core/source-adapter-normalization.d.ts +31 -0
  70. package/dist/core/source-adapter-normalization.js +235 -0
  71. package/dist/core/source-adapter-normalization.js.map +1 -0
  72. package/dist/core/source-snapshot-adapters.d.ts +3 -3
  73. package/dist/core/source-snapshot-adapters.js +2 -24
  74. package/dist/core/source-snapshot-adapters.js.map +1 -1
  75. package/dist/core/staffing-plan.d.ts +1 -0
  76. package/dist/core/staffing-plan.js +61 -3
  77. package/dist/core/staffing-plan.js.map +1 -1
  78. package/dist/core/stage-clarity-verification.js +21 -18
  79. package/dist/core/stage-clarity-verification.js.map +1 -1
  80. package/dist/core/stage-output-quality.d.ts +3 -0
  81. package/dist/core/stage-output-quality.js +122 -0
  82. package/dist/core/stage-output-quality.js.map +1 -0
  83. package/dist/core/stage-quality-contracts.d.ts +19 -0
  84. package/dist/core/stage-quality-contracts.js.map +1 -1
  85. package/dist/core/stage-quality-criteria.js +0 -37
  86. package/dist/core/stage-quality-criteria.js.map +1 -1
  87. package/dist/core/stage-quality-rendering.d.ts +4 -2
  88. package/dist/core/stage-quality-rendering.js +130 -12
  89. package/dist/core/stage-quality-rendering.js.map +1 -1
  90. package/dist/core/stage-quality.js +17 -6
  91. package/dist/core/stage-quality.js.map +1 -1
  92. package/dist/core/template-registry.js +12 -15
  93. package/dist/core/template-registry.js.map +1 -1
  94. package/dist/core/workspace-conformance.d.ts +39 -0
  95. package/dist/core/workspace-conformance.js +603 -0
  96. package/dist/core/workspace-conformance.js.map +1 -0
  97. package/package.json +2 -2
  98. package/schemas/providers.schema.json +74 -0
  99. package/schemas/zsk-config.schema.json +417 -1
  100. package/templates/project-init/.zsk/README.md +57 -0
  101. package/templates/project-init/.zsk/config.yaml +41 -33
  102. package/templates/project-init/.zsk/docs/CONFIG-SCHEMA.md +131 -0
  103. package/templates/project-init/.zsk/docs/PROJECT-CONFIG.md +49 -28
  104. package/templates/project-init/.zsk/docs/README.md +10 -0
  105. package/templates/project-init/.zsk/docs/SECURITY.md +34 -0
  106. package/templates/project-init/.zsk/docs/SYSTEM-SPEC.md +26 -9
  107. package/templates/project-init/.zsk/evidence/README.md +21 -0
  108. package/templates/project-init/.zsk/evidence/prepare/README.md +22 -0
  109. package/templates/project-init/.zsk/issues/README.md +10 -0
  110. package/templates/project-init/.zsk/modules/README.md +19 -0
  111. package/templates/project-init/.zsk/modules/index.md +9 -5
  112. package/templates/project-init/.zsk/raws/README.md +39 -0
  113. package/templates/project-init/.zsk/roles.yaml +36 -105
  114. package/templates/project-init/.zsk/templates/config.examples.yaml +104 -0
  115. package/templates/project-init/.zsk/templates/issue-card.md +23 -0
  116. package/templates/project-init/.zsk/templates/module/README.md +13 -0
  117. package/templates/project-init/.zsk/templates/module/design.md +22 -0
  118. package/templates/project-init/.zsk/templates/module/module.yaml +15 -0
  119. package/templates/project-init/.zsk/templates/module/proposal.md +20 -0
  120. package/templates/project-init/.zsk/templates/module/spec.md +22 -0
  121. package/templates/project-init/.zsk/templates/module/tasks.md +16 -0
  122. package/templates/project-init/.zsk/raws/index.md +0 -34
  123. package/templates/project-init/.zsk/raws/manifest.json +0 -4
  124. package/templates/project-init/.zsk/raws/prepare/backend/index.md +0 -4
  125. package/templates/project-init/.zsk/raws/prepare/design/index.md +0 -21
  126. package/templates/project-init/.zsk/raws/prepare/index.md +0 -37
  127. package/templates/project-init/.zsk/raws/prepare/product/index.md +0 -4
  128. package/templates/project-init/.zsk/raws/prepare/qa/index.md +0 -4
  129. package/templates/project-init/.zsk/raws/prepare/ux/index.md +0 -22
@@ -0,0 +1,603 @@
1
+ import { access, readFile, readdir, stat } from "node:fs/promises";
2
+ import { basename, dirname, extname, isAbsolute, join, relative, resolve } from "node:path";
3
+ import { inferSourceOrigin } from "./origin-detection.js";
4
+ import { getWorkspacePath, resolveWorkspaceLayout } from "./workspace-layout.js";
5
+ const STALE_PREPARE_RAW_LANES = new Set([
6
+ "qa-engineer",
7
+ "test-engineer",
8
+ "backend-engineer",
9
+ "frontend-engineer",
10
+ "product-manager",
11
+ "designer",
12
+ "jira",
13
+ "manual",
14
+ "provider",
15
+ "version",
16
+ ]);
17
+ const RUNTIME_ARTIFACT_EXTS = new Set([
18
+ ".log",
19
+ ".png",
20
+ ".jpg",
21
+ ".jpeg",
22
+ ".gif",
23
+ ".webp",
24
+ ".har",
25
+ ".mp4",
26
+ ".mov",
27
+ ".zip",
28
+ ]);
29
+ const STAGE_DOCS_REQUIRING_FEEDBACK = [
30
+ "proposal.md",
31
+ "spec.md",
32
+ "design.md",
33
+ "tasks.md",
34
+ "smoke.md",
35
+ "review.md",
36
+ "commit.md",
37
+ "deploy.md",
38
+ "demo-outline.md",
39
+ "demo-report.md",
40
+ "ready.md",
41
+ "verify.md",
42
+ "verification.md",
43
+ "acceptance.md",
44
+ "archive.md",
45
+ ];
46
+ const SPLITTABLE_STAGE_DOCS = new Set(["proposal", "spec", "design", "tasks"]);
47
+ const PLAYWRIGHT_TEST_FILE_RE = /\.(spec|test)\.[cm]?[jt]sx?$/i;
48
+ export function resolveProjectPath(root, value) {
49
+ return isAbsolute(value) ? value : resolve(root, value);
50
+ }
51
+ export function isPathInside(root, target) {
52
+ const rel = relative(root, target);
53
+ return rel === "" || (!rel.startsWith("..") && !isAbsolute(rel));
54
+ }
55
+ export function playwrightAuthRoots(target, config, moduleId) {
56
+ const sharedAuthRoot = resolve(target, getWorkspacePath(config, "playwrightRoot"), ".auth");
57
+ if (!moduleId)
58
+ return [sharedAuthRoot];
59
+ return [
60
+ resolve(target, getWorkspacePath(config, "playwrightAuth", { module: moduleId })),
61
+ sharedAuthRoot,
62
+ ];
63
+ }
64
+ export function isAllowedPlaywrightAuthStatePath(target, config, authStatePath) {
65
+ const statePath = resolveProjectPath(target, authStatePath);
66
+ const sharedAuthRoot = resolve(target, getWorkspacePath(config, "playwrightRoot"), ".auth");
67
+ const modulesRoot = resolve(target, getWorkspacePath(config, "modulesRoot"));
68
+ const pathParts = statePath.split(/[\\/]/);
69
+ const modulePrivate = isPathInside(modulesRoot, statePath) && pathParts.includes("_playwright") && pathParts.includes(".auth");
70
+ return isPathInside(sharedAuthRoot, statePath) || modulePrivate;
71
+ }
72
+ export function resolvePlaywrightAuthStatePath(target, config, authState) {
73
+ const statePath = resolveProjectPath(target, authState);
74
+ if (isAllowedPlaywrightAuthStatePath(target, config, statePath))
75
+ return statePath;
76
+ const sharedAuthRoot = resolve(target, getWorkspacePath(config, "playwrightRoot"), ".auth");
77
+ throw new Error(`Playwright storageState input must stay under ${sharedAuthRoot} or a module _playwright/.auth directory`);
78
+ }
79
+ export function resolvePlaywrightAuthProfilePath(target, config, profile) {
80
+ const authRoot = resolve(target, getWorkspacePath(config, "playwrightRoot"), ".auth");
81
+ const fileName = profile ? `${safeAuthProfileName(profile)}.json` : "user_data.json";
82
+ return join(authRoot, fileName);
83
+ }
84
+ export async function assessWorkspaceConformance(input) {
85
+ const issues = [];
86
+ const warnings = [];
87
+ await checkWorkspacePathLeaks(input.target, issues);
88
+ await checkStageDirectoryArtifacts(input.target, getWorkspacePath(input.config, "modulesRoot"), issues);
89
+ await checkRawTestingMapped(input.target, [
90
+ getWorkspacePath(input.config, "resourcesTesting"),
91
+ join(getWorkspacePath(input.config, "resourcesRoot"), "qa", "testing"),
92
+ ], input.modules, issues);
93
+ await checkPrepareRawTopology(input.target, getWorkspacePath(input.config, "resourcesRoot"), issues);
94
+ await checkConfiguredSourceOrigins(input.target, input.configFile, input.sources, input.resolveSourceSnapshot, warnings);
95
+ await checkMissingCurrentRawReferences(input.target, input.config, warnings, issues);
96
+ await checkDocsArtifacts(input.target, [
97
+ getWorkspacePath(input.config, "docsRoot"),
98
+ getWorkspacePath(input.config, "modulesRoot"),
99
+ "docs",
100
+ ], getWorkspacePath(input.config, "evidenceRoot"), issues);
101
+ await checkPlaywrightSpecGates(input.target, [getWorkspacePath(input.config, "playwrightRoot"), getWorkspacePath(input.config, "modulesRoot")], issues);
102
+ await checkAuthStatePlacement(input.target, input.config, issues);
103
+ await checkCompletedDemoEvidence(input.target, [getWorkspacePath(input.config, "playwrightRoot"), getWorkspacePath(input.config, "modulesRoot")], issues);
104
+ await checkDocumentationFeedback(input.target, input.modules, issues);
105
+ return { issues, warnings };
106
+ }
107
+ async function checkRawTestingMapped(target, testingPaths, modules, issues) {
108
+ const rawFiles = [];
109
+ for (const testingPath of unique(testingPaths)) {
110
+ const testingRoot = resolve(target, testingPath);
111
+ rawFiles.push(...(await collectFiles(testingRoot)).filter((file) => !file.endsWith("/README.md") && !file.endsWith("/index.md")));
112
+ }
113
+ if (rawFiles.length === 0)
114
+ return;
115
+ const mapped = new Set();
116
+ for (const mod of modules) {
117
+ for (const p of mod.config.tests?.raw_cases ?? [])
118
+ mapped.add(resolve(target, p));
119
+ for (const p of mod.config.sources?.testing ?? [])
120
+ mapped.add(resolve(target, p));
121
+ }
122
+ for (const file of rawFiles) {
123
+ if (mapped.has(file))
124
+ continue;
125
+ issues.push({
126
+ file,
127
+ message: "raw test case is not mapped to any module.yaml tests.raw_cases or sources.testing entry",
128
+ });
129
+ }
130
+ }
131
+ async function checkPrepareRawTopology(target, rawsPath, issues) {
132
+ const prepareRoot = resolve(target, rawsPath, "prepare");
133
+ try {
134
+ const entries = await readdir(prepareRoot, { withFileTypes: true });
135
+ for (const entry of entries) {
136
+ if (entry.isFile() && ["index.md", "README.md"].includes(entry.name))
137
+ continue;
138
+ if (!entry.isDirectory()) {
139
+ issues.push({
140
+ file: join(prepareRoot, entry.name),
141
+ message: "prepare raw source entries must live under a responsibility lane such as product, backend, design, ux, qa, or a project-defined extension",
142
+ });
143
+ continue;
144
+ }
145
+ if (!isDisallowedPrepareLane(entry.name))
146
+ continue;
147
+ issues.push({
148
+ file: join(prepareRoot, entry.name),
149
+ message: "stale prepare raw lane; use current responsibility lanes such as product, backend, design, ux, qa, or a project-defined extension lane",
150
+ });
151
+ }
152
+ }
153
+ catch {
154
+ // prepare/ is optional for legacy workspaces.
155
+ }
156
+ const zskRoot = resolve(target, ".zsk");
157
+ const maintainedFiles = (await collectFiles(zskRoot)).filter((file) => isMaintainedTextArtifact(file));
158
+ const staleReferencePattern = /\.zsk\/raws\/prepare\/([A-Za-z0-9_-]+)/g;
159
+ for (const file of maintainedFiles) {
160
+ const content = await readFile(file, "utf8");
161
+ for (const match of content.matchAll(staleReferencePattern)) {
162
+ const lane = match[1];
163
+ if (!lane || !isDisallowedPrepareLane(lane))
164
+ continue;
165
+ issues.push({
166
+ file,
167
+ message: `stale prepare raw lane referenced: ${lane}`,
168
+ });
169
+ }
170
+ }
171
+ }
172
+ async function checkDocsArtifacts(target, docsPaths, evidencePath, issues) {
173
+ const roots = unique(docsPaths).map((docsPath) => resolve(target, docsPath));
174
+ const files = [];
175
+ for (const root of roots)
176
+ files.push(...(await collectFiles(root)));
177
+ for (const file of files) {
178
+ const ext = extname(file).toLowerCase();
179
+ const root = roots.find((candidate) => isPathInside(candidate, file)) ?? target;
180
+ const name = relative(root, file).toLowerCase();
181
+ if (name.split("/").some((part) => ["_issues", "_evidence", "_playwright"].includes(part)))
182
+ continue;
183
+ const isPlaywrightSpec = PLAYWRIGHT_TEST_FILE_RE.test(name);
184
+ const isPlaywrightRuntime = name.includes("/playwright-report/") ||
185
+ name.includes("/test-results/") ||
186
+ name.includes("/.auth/") ||
187
+ name.endsWith("/storage-state.json") ||
188
+ name.endsWith("/storagestate.json");
189
+ if (isPlaywrightSpec || isPlaywrightRuntime) {
190
+ issues.push({
191
+ file,
192
+ message: "Playwright specs and runtime artifacts belong under .zsk/modules/{module}/_playwright or shared .zsk/playwright, not docs roots",
193
+ });
194
+ continue;
195
+ }
196
+ const isEvidence = RUNTIME_ARTIFACT_EXTS.has(ext) ||
197
+ name.includes("debug-log") ||
198
+ name.includes("debug-logs") ||
199
+ name.includes("evidence") ||
200
+ name.includes("failed-verification") ||
201
+ name.includes("console.log") ||
202
+ ([".txt", ".json"].includes(ext) &&
203
+ /debug|evidence|console|screenshot|failed-verification/.test(name));
204
+ if (!isEvidence)
205
+ continue;
206
+ issues.push({
207
+ file,
208
+ message: `runtime evidence belongs under ${evidencePath} or .zsk/modules/{module}/_evidence, not a docs or module-docs root`,
209
+ });
210
+ }
211
+ }
212
+ async function checkConfiguredSourceOrigins(target, configFile, sources, resolveSourceSnapshot, warnings) {
213
+ for (const entry of sources) {
214
+ const origin = inferSourceOrigin(entry.source);
215
+ if (origin.method !== "local" || !origin.ref)
216
+ continue;
217
+ const originPath = resolve(target, origin.ref);
218
+ if (await exists(originPath))
219
+ continue;
220
+ const snapshot = resolveSourceSnapshot(entry);
221
+ const snapshotExists = await exists(resolve(target, snapshot));
222
+ warnings.push({
223
+ file: configFile,
224
+ message: `configured local source origin is missing for ${entry.path}: ${origin.ref}; ${snapshotExists ? `snapshot exists at ${snapshot}` : `snapshot is also missing at ${snapshot}`}. Update source metadata or restore the origin, then refresh .zsk/raws/manifest.json and raw indexes after migration.`,
225
+ });
226
+ }
227
+ }
228
+ async function checkMissingCurrentRawReferences(target, config, warnings, issues) {
229
+ const roots = [
230
+ resolve(target, ".zsk", "config.yaml"),
231
+ resolve(target, getWorkspacePath(config, "docsRoot")),
232
+ resolve(target, getWorkspacePath(config, "resourcesRoot")),
233
+ ];
234
+ const files = unique((await Promise.all(roots.map((root) => collectAuthorityFiles(root)))).flat());
235
+ const seen = new Set();
236
+ for (const file of files) {
237
+ const content = await readFile(file, "utf8");
238
+ for (const match of content.matchAll(/(^|[^\w.])(\.(?:raws|issues|playwright)\/[A-Za-z0-9._/-]+)/g)) {
239
+ if (allowsRootWorkspaceReference(content))
240
+ continue;
241
+ const ref = trimRawReference(match[2] ?? "");
242
+ if (!ref)
243
+ continue;
244
+ const key = `${file}\0${ref}`;
245
+ if (seen.has(key))
246
+ continue;
247
+ seen.add(key);
248
+ issues.push({
249
+ file,
250
+ message: `current authority artifact references legacy root workspace path ${ref}; use configured .zsk workspace paths or record zsk-check: allow-root-workspace-reference with rationale`,
251
+ });
252
+ }
253
+ for (const match of content.matchAll(/\.zsk\/raws\/[A-Za-z0-9._/-]+/g)) {
254
+ const ref = trimRawReference(match[0] ?? "");
255
+ if (!ref || ref === ".zsk/raws")
256
+ continue;
257
+ if (!extname(ref))
258
+ continue;
259
+ const resolved = resolve(target, ref);
260
+ if (await exists(resolved))
261
+ continue;
262
+ const key = `${file}\0${ref}`;
263
+ if (seen.has(key))
264
+ continue;
265
+ seen.add(key);
266
+ warnings.push({
267
+ file,
268
+ message: `current authority artifact references missing raw path ${ref}; after source migration, update config/docs/raw indexes or record why this historical reference is intentionally retained.`,
269
+ });
270
+ }
271
+ }
272
+ }
273
+ async function checkWorkspacePathLeaks(target, issues) {
274
+ for (const path of [".raws", ".issues", ".playwright"]) {
275
+ const resolved = resolve(target, path);
276
+ if (!(await exists(resolved)))
277
+ continue;
278
+ if (await allowsRootWorkspacePath(resolved))
279
+ continue;
280
+ const targetHint = path === ".raws"
281
+ ? "use .zsk/raws for raw source snapshots"
282
+ : path === ".issues"
283
+ ? "use .zsk/issues/{shared|global|public} for cross-module issues or .zsk/modules/{module}/_issues for module-private issues"
284
+ : "use .zsk/playwright for shared Playwright artifacts or .zsk/modules/{module}/_playwright for module-private specs/auth/results";
285
+ issues.push({
286
+ file: resolve(target, path),
287
+ message: `legacy root zsk workspace path detected; ${targetHint}; migrate/export root copies explicitly`,
288
+ });
289
+ }
290
+ if (await exists(resolve(target, ".zsk/resources"))) {
291
+ issues.push({
292
+ file: resolve(target, ".zsk/resources"),
293
+ message: "unexpected .zsk/resources path detected; remove it and use config.yaml resources plus .zsk/raws/** snapshots",
294
+ });
295
+ }
296
+ const rootDocs = resolve(target, "docs");
297
+ const docsFiles = await collectFiles(rootDocs);
298
+ for (const file of docsFiles) {
299
+ const name = basename(file);
300
+ const parentName = basename(dirname(file)).toLowerCase();
301
+ const rel = relative(rootDocs, file);
302
+ const looksZskManaged = name === "module.yaml" ||
303
+ ["proposal.md", "spec.md", "design.md", "tasks.md"].includes(name) ||
304
+ (name === "index.md" && SPLITTABLE_STAGE_DOCS.has(parentName)) ||
305
+ rel.split("/").includes("scenarios");
306
+ if (!looksZskManaged)
307
+ continue;
308
+ issues.push({
309
+ file,
310
+ message: "zsk-managed stage docs belong under .zsk/modules/{module}/{proposal,spec,design,tasks}.md or {proposal,spec,design,tasks}/index.md; root docs should only be written by explicit export/promote",
311
+ });
312
+ }
313
+ for (const root of ["plans", join(".omx", "plans")]) {
314
+ const planFiles = (await collectFiles(resolve(target, root))).filter((file) => extname(file).toLowerCase() === ".md");
315
+ for (const file of planFiles) {
316
+ const content = await readFile(file, "utf8");
317
+ if (!/\bMode:\s*zskplan\b|^#\s+ZSK Plan\b|Plan artifact:\s*\.zsk\/plans\//im.test(content))
318
+ continue;
319
+ issues.push({
320
+ file,
321
+ message: "ZSK plan artifacts belong under .zsk/plans, not root plans or .omx/plans",
322
+ });
323
+ }
324
+ }
325
+ }
326
+ async function checkStageDirectoryArtifacts(target, modulesPath, issues) {
327
+ const modulesRoot = resolve(target, modulesPath);
328
+ try {
329
+ const modules = await readdir(modulesRoot, { withFileTypes: true });
330
+ for (const mod of modules) {
331
+ if (!mod.isDirectory() || mod.name.startsWith("_"))
332
+ continue;
333
+ const moduleDir = join(modulesRoot, mod.name);
334
+ for (const stage of SPLITTABLE_STAGE_DOCS) {
335
+ const stageDir = join(moduleDir, stage);
336
+ let stageInfo;
337
+ try {
338
+ stageInfo = await stat(stageDir);
339
+ }
340
+ catch {
341
+ continue;
342
+ }
343
+ if (!stageInfo.isDirectory())
344
+ continue;
345
+ const indexPath = join(stageDir, "index.md");
346
+ if (!await exists(indexPath)) {
347
+ issues.push({
348
+ file: stageDir,
349
+ message: "split stage artifact directory must contain index.md as the review entrypoint",
350
+ });
351
+ continue;
352
+ }
353
+ const indexContent = await readFile(indexPath, "utf8");
354
+ const linkedChildren = linkedStageChildren(indexContent, stageDir);
355
+ const childDocs = (await collectFiles(stageDir)).filter((file) => {
356
+ const childName = basename(file);
357
+ return extname(file).toLowerCase() === ".md" && childName !== "index.md" && childName !== "README.md";
358
+ });
359
+ for (const child of childDocs) {
360
+ if (linkedChildren.has(child))
361
+ continue;
362
+ issues.push({
363
+ file: child,
364
+ message: "split stage child document must be linked from the stage index.md entrypoint",
365
+ });
366
+ }
367
+ }
368
+ }
369
+ }
370
+ catch {
371
+ // modules root is optional for freshly initialized or config-only projects.
372
+ }
373
+ }
374
+ async function checkPlaywrightSpecGates(target, playwrightPaths, issues) {
375
+ const files = [];
376
+ for (const playwrightPath of playwrightPaths) {
377
+ files.push(...(await collectFiles(resolve(target, playwrightPath))));
378
+ }
379
+ const specFiles = unique(files).filter((file) => PLAYWRIGHT_TEST_FILE_RE.test(file));
380
+ for (const file of specFiles) {
381
+ const content = await readFile(file, "utf8");
382
+ if (/\bTODO\b/i.test(content)) {
383
+ issues.push({ file, message: "Playwright spec contains TODO; refine or keep it out of the promoted spec path" });
384
+ }
385
+ if (/\btest\.fixme\s*\(/.test(content)) {
386
+ issues.push({ file, message: "Playwright spec contains test.fixme; promoted specs must represent executable intent" });
387
+ }
388
+ if (/\btest(?:\.describe)?\.skip\s*\(/.test(content)) {
389
+ issues.push({ file, message: "Playwright spec contains test.skip; record a blocker or waiver instead of promoting a skipped spec" });
390
+ }
391
+ if (/\.first\s*\(|ZSK_GENERATED_REFINEMENT_REQUIRED|Refine locator names/i.test(content)) {
392
+ issues.push({ file, message: "Playwright spec still contains generated or unrefined locators; refine locator names before promotion" });
393
+ }
394
+ }
395
+ }
396
+ async function checkAuthStatePlacement(target, config, issues) {
397
+ const layout = resolveWorkspaceLayout(config);
398
+ const roots = unique([
399
+ ".auth",
400
+ "playwright",
401
+ ".playwright",
402
+ "docs",
403
+ layout.docsRoot,
404
+ layout.modulesRoot,
405
+ layout.resourcesRoot,
406
+ layout.issuesRoot,
407
+ layout.evidenceRoot,
408
+ ]);
409
+ const files = [];
410
+ for (const root of roots)
411
+ files.push(...(await collectFiles(resolve(target, root))));
412
+ for (const file of files) {
413
+ if (!looksLikeAuthState(file))
414
+ continue;
415
+ if (isAllowedPlaywrightAuthStatePath(target, config, file))
416
+ continue;
417
+ issues.push({
418
+ file,
419
+ message: "auth/storage state belongs under module _playwright/.auth or shared .zsk/playwright/.auth and must not leak into docs, evidence, raws, or root Playwright paths",
420
+ });
421
+ }
422
+ }
423
+ async function checkCompletedDemoEvidence(target, playwrightPaths, issues) {
424
+ const files = [];
425
+ for (const playwrightPath of playwrightPaths) {
426
+ files.push(...(await collectFiles(resolve(target, playwrightPath))));
427
+ }
428
+ const executionFiles = unique(files).filter((file) => file.endsWith("/execution/current.json"));
429
+ for (const file of executionFiles) {
430
+ let session;
431
+ try {
432
+ session = JSON.parse(await readFile(file, "utf8"));
433
+ }
434
+ catch {
435
+ issues.push({ file, message: "demo execution session is not valid JSON" });
436
+ continue;
437
+ }
438
+ if (session.status !== "completed")
439
+ continue;
440
+ const hasWaiver = /waiver|豁免|免除/i.test(session.note ?? "");
441
+ const hasPassedExecution = await hasPassedPlaywrightExecution(file);
442
+ if (hasWaiver || hasPassedExecution)
443
+ continue;
444
+ issues.push({
445
+ file,
446
+ message: "completed demo session needs passed Playwright execution evidence or an explicit waiver",
447
+ });
448
+ }
449
+ }
450
+ async function checkDocumentationFeedback(target, modules, issues) {
451
+ for (const mod of modules) {
452
+ const docsDir = mod.config.outputs?.docs ? resolve(target, mod.config.outputs.docs) : null;
453
+ if (!docsDir)
454
+ continue;
455
+ const candidates = [
456
+ ...STAGE_DOCS_REQUIRING_FEEDBACK.map((name) => join(docsDir, name)),
457
+ ...[...SPLITTABLE_STAGE_DOCS].map((name) => join(docsDir, name, "index.md")),
458
+ ];
459
+ const existing = [];
460
+ for (const file of candidates) {
461
+ try {
462
+ existing.push({ file, content: await readFile(file, "utf8") });
463
+ }
464
+ catch {
465
+ // Optional until the module exists.
466
+ }
467
+ }
468
+ if (existing.length === 0)
469
+ continue;
470
+ for (const item of existing) {
471
+ if (hasDocumentationFeedback(item.content))
472
+ continue;
473
+ issues.push({
474
+ file: item.file,
475
+ message: "stage doc should include Documentation Feedback with updates, or an explicit no-update rationale",
476
+ });
477
+ }
478
+ }
479
+ }
480
+ async function hasPassedPlaywrightExecution(sessionFile) {
481
+ const executionFile = join(dirname(sessionFile), "playwright-execution.json");
482
+ let execution;
483
+ try {
484
+ execution = JSON.parse(await readFile(executionFile, "utf8"));
485
+ }
486
+ catch {
487
+ return false;
488
+ }
489
+ if (!/^(passed|completed)$/i.test(execution.status ?? ""))
490
+ return false;
491
+ const evidence = execution.evidence ?? {};
492
+ return Object.values(evidence).some((value) => typeof value === "string" && value.trim().length > 0);
493
+ }
494
+ function hasDocumentationFeedback(content) {
495
+ const marker = content.match(/^##+\s+Documentation Feedback\b([\s\S]*)$/im);
496
+ if (!marker)
497
+ return false;
498
+ const body = (marker[1] ?? "").trim();
499
+ if (body.length === 0)
500
+ return false;
501
+ return /no[- ]update|无需更新|无更新|not applicable|N\/A/i.test(body) || /-\s+\[[ x]\]/i.test(body) || /\|/.test(body);
502
+ }
503
+ function allowsRootWorkspaceReference(content) {
504
+ return /zsk-check:\s*allow-root-workspace-reference|waived-root-workspace-reference/i.test(content);
505
+ }
506
+ async function allowsRootWorkspacePath(path) {
507
+ const readme = resolve(path, "README.md");
508
+ if (!(await exists(readme)))
509
+ return false;
510
+ return allowsRootWorkspaceReference(await readFile(readme, "utf8"));
511
+ }
512
+ async function collectFiles(root) {
513
+ try {
514
+ const entries = await readdir(root, { withFileTypes: true });
515
+ const files = [];
516
+ for (const entry of entries) {
517
+ const path = join(root, entry.name);
518
+ if (entry.isDirectory())
519
+ files.push(...(await collectFiles(path)));
520
+ if (entry.isFile())
521
+ files.push(path);
522
+ }
523
+ return files;
524
+ }
525
+ catch {
526
+ return [];
527
+ }
528
+ }
529
+ async function collectAuthorityFiles(root) {
530
+ if (!await exists(root))
531
+ return [];
532
+ try {
533
+ const info = await stat(root);
534
+ if (info.isFile())
535
+ return isMaintainedTextArtifact(root) ? [root] : [];
536
+ }
537
+ catch {
538
+ return [];
539
+ }
540
+ const files = await collectFiles(root);
541
+ return files.filter((file) => {
542
+ if (!isMaintainedTextArtifact(file))
543
+ return false;
544
+ if (file.includes("/.zsk/evidence/"))
545
+ return false;
546
+ if (file.includes("/.zsk/issues/"))
547
+ return false;
548
+ if (file.includes("/.zsk/playwright/"))
549
+ return false;
550
+ return true;
551
+ });
552
+ }
553
+ function trimRawReference(value) {
554
+ return value.replace(/[)\],.;:'"`]+$/g, "");
555
+ }
556
+ function looksLikeAuthState(file) {
557
+ const lower = file.toLowerCase();
558
+ const name = basename(lower);
559
+ return (lower.includes("/.auth/") ||
560
+ lower.includes("storagestate") ||
561
+ lower.includes("storage-state") ||
562
+ ["auth.json", "user.json", "state.json", "cookies.json", "storage.json"].includes(name));
563
+ }
564
+ function isMaintainedTextArtifact(file) {
565
+ const lower = file.toLowerCase();
566
+ if (lower.includes("/.auth/"))
567
+ return false;
568
+ return [".md", ".json", ".yaml", ".yml", ".ts", ".tsx", ".js", ".mjs"].includes(extname(lower));
569
+ }
570
+ function isDisallowedPrepareLane(value) {
571
+ return (STALE_PREPARE_RAW_LANES.has(value) ||
572
+ /^v?\d+(?:[._-]\d+)*$/i.test(value) ||
573
+ /^(sprint|iteration|release)[-_]?\d*/i.test(value));
574
+ }
575
+ function linkedStageChildren(content, dir) {
576
+ const files = new Set();
577
+ for (const match of content.matchAll(/\[[^\]]+\]\(([^)]+?\.md)(?:#[^)]+)?\)/gi)) {
578
+ const raw = match[1]?.trim();
579
+ if (!raw || /^[a-z][a-z0-9+.-]*:/i.test(raw) || raw.startsWith("/"))
580
+ continue;
581
+ const child = resolve(dir, raw);
582
+ if (!isPathInside(dir, child) || child === resolve(dir, "index.md"))
583
+ continue;
584
+ files.add(child);
585
+ }
586
+ return files;
587
+ }
588
+ function unique(values) {
589
+ return [...new Set(values)];
590
+ }
591
+ async function exists(path) {
592
+ try {
593
+ await access(path);
594
+ return true;
595
+ }
596
+ catch {
597
+ return false;
598
+ }
599
+ }
600
+ function safeAuthProfileName(value) {
601
+ return value.toLowerCase().replace(/[^a-z0-9._-]+/g, "-").replace(/^-+|-+$/g, "") || "source";
602
+ }
603
+ //# sourceMappingURL=workspace-conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-conformance.js","sourceRoot":"","sources":["../../src/core/workspace-conformance.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@captain_z/zsk",
3
- "version": "1.8.4",
3
+ "version": "1.8.6",
4
4
  "description": "ZNorth Standard Kit — CLI installer for zsk skill bundles (npx @captain_z/zsk add)",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -20,7 +20,7 @@
20
20
  "commander": "^12.1.0",
21
21
  "picocolors": "^1.1.1",
22
22
  "yaml": "^2.7.0",
23
- "@captain_z/zsk-skills": "1.8.4"
23
+ "@captain_z/zsk-skills": "1.8.6"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/node": "^22.10.0",