@lumenflow/core 2.18.3 → 2.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/terminal-renderer.adapter.d.ts.map +1 -1
- package/dist/adapters/terminal-renderer.adapter.js +6 -4
- package/dist/adapters/terminal-renderer.adapter.js.map +1 -1
- package/dist/arg-parser.js +2 -2
- package/dist/arg-parser.js.map +1 -1
- package/dist/atomic-merge.d.ts +21 -0
- package/dist/atomic-merge.d.ts.map +1 -0
- package/dist/atomic-merge.js +83 -0
- package/dist/atomic-merge.js.map +1 -0
- package/dist/context/wu-state-reader.d.ts +2 -0
- package/dist/context/wu-state-reader.d.ts.map +1 -1
- package/dist/context/wu-state-reader.js +3 -0
- package/dist/context/wu-state-reader.js.map +1 -1
- package/dist/delegation-escalation.d.ts +91 -0
- package/dist/delegation-escalation.d.ts.map +1 -0
- package/dist/delegation-escalation.js +258 -0
- package/dist/delegation-escalation.js.map +1 -0
- package/dist/delegation-monitor.d.ts +230 -0
- package/dist/delegation-monitor.d.ts.map +1 -0
- package/dist/delegation-monitor.js +675 -0
- package/dist/delegation-monitor.js.map +1 -0
- package/dist/delegation-recovery.d.ts +83 -0
- package/dist/delegation-recovery.d.ts.map +1 -0
- package/dist/delegation-recovery.js +299 -0
- package/dist/delegation-recovery.js.map +1 -0
- package/dist/delegation-registry-schema.d.ts +80 -0
- package/dist/delegation-registry-schema.d.ts.map +1 -0
- package/dist/delegation-registry-schema.js +91 -0
- package/dist/delegation-registry-schema.js.map +1 -0
- package/dist/delegation-registry-store.d.ts +159 -0
- package/dist/delegation-registry-store.d.ts.map +1 -0
- package/dist/delegation-registry-store.js +299 -0
- package/dist/delegation-registry-store.js.map +1 -0
- package/dist/delegation-tree.d.ts +57 -0
- package/dist/delegation-tree.d.ts.map +1 -0
- package/dist/delegation-tree.js +203 -0
- package/dist/delegation-tree.js.map +1 -0
- package/dist/gates-agent-mode.d.ts +25 -0
- package/dist/gates-agent-mode.d.ts.map +1 -1
- package/dist/gates-agent-mode.js +41 -0
- package/dist/gates-agent-mode.js.map +1 -1
- package/dist/index.d.ts +16 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +20 -9
- package/dist/index.js.map +1 -1
- package/dist/lumenflow-config-schema.d.ts +9 -3
- package/dist/lumenflow-config-schema.d.ts.map +1 -1
- package/dist/lumenflow-config-schema.js +19 -4
- package/dist/lumenflow-config-schema.js.map +1 -1
- package/dist/lumenflow-config.d.ts +2 -0
- package/dist/lumenflow-config.d.ts.map +1 -1
- package/dist/lumenflow-config.js +1 -0
- package/dist/lumenflow-config.js.map +1 -1
- package/dist/micro-worktree.d.ts.map +1 -1
- package/dist/micro-worktree.js +15 -9
- package/dist/micro-worktree.js.map +1 -1
- package/dist/rollback-utils.d.ts +52 -0
- package/dist/rollback-utils.d.ts.map +1 -1
- package/dist/rollback-utils.js +111 -0
- package/dist/rollback-utils.js.map +1 -1
- package/dist/sandbox-allowlist.d.ts +16 -0
- package/dist/sandbox-allowlist.d.ts.map +1 -0
- package/dist/sandbox-allowlist.js +75 -0
- package/dist/sandbox-allowlist.js.map +1 -0
- package/dist/sandbox-backend-linux.d.ts +6 -0
- package/dist/sandbox-backend-linux.d.ts.map +1 -0
- package/dist/sandbox-backend-linux.js +65 -0
- package/dist/sandbox-backend-linux.js.map +1 -0
- package/dist/sandbox-backend-macos.d.ts +6 -0
- package/dist/sandbox-backend-macos.d.ts.map +1 -0
- package/dist/sandbox-backend-macos.js +64 -0
- package/dist/sandbox-backend-macos.js.map +1 -0
- package/dist/sandbox-backend-windows.d.ts +6 -0
- package/dist/sandbox-backend-windows.d.ts.map +1 -0
- package/dist/sandbox-backend-windows.js +28 -0
- package/dist/sandbox-backend-windows.js.map +1 -0
- package/dist/sandbox-profile.d.ts +53 -0
- package/dist/sandbox-profile.d.ts.map +1 -0
- package/dist/sandbox-profile.js +62 -0
- package/dist/sandbox-profile.js.map +1 -0
- package/dist/schemas/index.d.ts +3 -3
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +6 -6
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/initiative-arg-validators.d.ts +1 -0
- package/dist/schemas/initiative-arg-validators.d.ts.map +1 -1
- package/dist/schemas/initiative-schemas.d.ts +3 -1
- package/dist/schemas/initiative-schemas.d.ts.map +1 -1
- package/dist/schemas/initiative-schemas.js +2 -1
- package/dist/schemas/initiative-schemas.js.map +1 -1
- package/dist/schemas/setup-arg-validators.d.ts +4 -4
- package/dist/schemas/setup-arg-validators.d.ts.map +1 -1
- package/dist/schemas/setup-arg-validators.js +6 -6
- package/dist/schemas/setup-arg-validators.js.map +1 -1
- package/dist/schemas/setup-schemas.d.ts +7 -7
- package/dist/schemas/setup-schemas.d.ts.map +1 -1
- package/dist/schemas/setup-schemas.js +11 -11
- package/dist/schemas/setup-schemas.js.map +1 -1
- package/dist/schemas/wu-lifecycle-arg-validators.d.ts +2 -1
- package/dist/schemas/wu-lifecycle-arg-validators.d.ts.map +1 -1
- package/dist/schemas/wu-lifecycle-schemas.d.ts +5 -3
- package/dist/schemas/wu-lifecycle-schemas.d.ts.map +1 -1
- package/dist/schemas/wu-lifecycle-schemas.js +6 -2
- package/dist/schemas/wu-lifecycle-schemas.js.map +1 -1
- package/dist/spawn-strategy.d.ts +1 -1
- package/dist/spawn-strategy.js +1 -1
- package/dist/template-loader.d.ts +7 -3
- package/dist/template-loader.d.ts.map +1 -1
- package/dist/template-loader.js +22 -6
- package/dist/template-loader.js.map +1 -1
- package/dist/validation/types.d.ts +2 -0
- package/dist/validation/types.d.ts.map +1 -1
- package/dist/wu-consistency-checker.d.ts +1 -0
- package/dist/wu-consistency-checker.d.ts.map +1 -1
- package/dist/wu-consistency-checker.js +31 -2
- package/dist/wu-consistency-checker.js.map +1 -1
- package/dist/wu-context-constants.d.ts +4 -2
- package/dist/wu-context-constants.d.ts.map +1 -1
- package/dist/wu-context-constants.js +4 -2
- package/dist/wu-context-constants.js.map +1 -1
- package/dist/wu-done-branch-only.d.ts +2 -11
- package/dist/wu-done-branch-only.d.ts.map +1 -1
- package/dist/wu-done-branch-only.js +81 -45
- package/dist/wu-done-branch-only.js.map +1 -1
- package/dist/wu-done-cleanup.js +33 -1
- package/dist/wu-done-cleanup.js.map +1 -1
- package/dist/wu-done-initiative-sync.d.ts.map +1 -1
- package/dist/wu-done-initiative-sync.js +20 -5
- package/dist/wu-done-initiative-sync.js.map +1 -1
- package/dist/wu-done-machine.d.ts +175 -0
- package/dist/wu-done-machine.d.ts.map +1 -0
- package/dist/wu-done-machine.js +225 -0
- package/dist/wu-done-machine.js.map +1 -0
- package/dist/wu-done-metadata.d.ts.map +1 -1
- package/dist/wu-done-metadata.js +3 -1
- package/dist/wu-done-metadata.js.map +1 -1
- package/dist/wu-done-preflight.d.ts +8 -0
- package/dist/wu-done-preflight.d.ts.map +1 -1
- package/dist/wu-done-preflight.js +17 -1
- package/dist/wu-done-preflight.js.map +1 -1
- package/dist/wu-done-validation.d.ts +0 -37
- package/dist/wu-done-validation.d.ts.map +1 -1
- package/dist/wu-done-validation.js +1 -155
- package/dist/wu-done-validation.js.map +1 -1
- package/dist/wu-done-validators.d.ts +1 -2
- package/dist/wu-done-validators.d.ts.map +1 -1
- package/dist/wu-done-validators.js +1 -3
- package/dist/wu-done-validators.js.map +1 -1
- package/dist/wu-done-worktree-services.d.ts +191 -0
- package/dist/wu-done-worktree-services.d.ts.map +1 -0
- package/dist/wu-done-worktree-services.js +273 -0
- package/dist/wu-done-worktree-services.js.map +1 -0
- package/dist/wu-done-worktree.d.ts +0 -19
- package/dist/wu-done-worktree.d.ts.map +1 -1
- package/dist/wu-done-worktree.js +165 -118
- package/dist/wu-done-worktree.js.map +1 -1
- package/dist/wu-git-constants.d.ts +4 -0
- package/dist/wu-git-constants.d.ts.map +1 -1
- package/dist/wu-git-constants.js +4 -0
- package/dist/wu-git-constants.js.map +1 -1
- package/dist/wu-helpers.d.ts +5 -1
- package/dist/wu-helpers.d.ts.map +1 -1
- package/dist/wu-helpers.js +5 -1
- package/dist/wu-helpers.js.map +1 -1
- package/dist/wu-lint.d.ts +53 -37
- package/dist/wu-lint.d.ts.map +1 -1
- package/dist/wu-lint.js +95 -105
- package/dist/wu-lint.js.map +1 -1
- package/dist/wu-paths-constants.d.ts +3 -3
- package/dist/wu-paths-constants.d.ts.map +1 -1
- package/dist/wu-paths-constants.js +3 -3
- package/dist/wu-paths-constants.js.map +1 -1
- package/dist/wu-preflight-validators.d.ts +28 -77
- package/dist/wu-preflight-validators.d.ts.map +1 -1
- package/dist/wu-preflight-validators.js +86 -130
- package/dist/wu-preflight-validators.js.map +1 -1
- package/dist/wu-recovery.d.ts +89 -0
- package/dist/wu-recovery.d.ts.map +1 -1
- package/dist/wu-recovery.js +118 -0
- package/dist/wu-recovery.js.map +1 -1
- package/dist/wu-rules-core.d.ts +95 -0
- package/dist/wu-rules-core.d.ts.map +1 -0
- package/dist/wu-rules-core.js +399 -0
- package/dist/wu-rules-core.js.map +1 -0
- package/dist/wu-rules-engine.d.ts +29 -0
- package/dist/wu-rules-engine.d.ts.map +1 -0
- package/dist/wu-rules-engine.js +59 -0
- package/dist/wu-rules-engine.js.map +1 -0
- package/dist/wu-rules-resolvers.d.ts +19 -0
- package/dist/wu-rules-resolvers.d.ts.map +1 -0
- package/dist/wu-rules-resolvers.js +208 -0
- package/dist/wu-rules-resolvers.js.map +1 -0
- package/dist/wu-schema.d.ts +24 -9
- package/dist/wu-schema.d.ts.map +1 -1
- package/dist/wu-schema.js +14 -1
- package/dist/wu-schema.js.map +1 -1
- package/dist/wu-spawn-context.d.ts +1 -1
- package/dist/wu-spawn-context.d.ts.map +1 -1
- package/dist/wu-spawn-context.js +8 -2
- package/dist/wu-spawn-context.js.map +1 -1
- package/dist/wu-spawn-helpers.js +2 -2
- package/dist/wu-spawn-helpers.js.map +1 -1
- package/dist/wu-state-schema.d.ts +12 -12
- package/dist/wu-state-schema.d.ts.map +1 -1
- package/dist/wu-state-schema.js +10 -10
- package/dist/wu-state-schema.js.map +1 -1
- package/dist/wu-state-store.d.ts +10 -4
- package/dist/wu-state-store.d.ts.map +1 -1
- package/dist/wu-state-store.js +309 -11
- package/dist/wu-state-store.js.map +1 -1
- package/dist/wu-transaction.d.ts +21 -0
- package/dist/wu-transaction.d.ts.map +1 -1
- package/dist/wu-transaction.js +17 -0
- package/dist/wu-transaction.js.map +1 -1
- package/package.json +14 -11
package/dist/wu-recovery.js
CHANGED
|
@@ -13,6 +13,11 @@
|
|
|
13
13
|
* NOTE (WU-1826): Core recovery functions are now re-exported from
|
|
14
14
|
* tools/lib/wu-repair-core.ts for use by the unified wu:repair command.
|
|
15
15
|
* This module remains the canonical implementation used by wu-done.ts.
|
|
16
|
+
*
|
|
17
|
+
* WU-1665: Adds state-machine-driven recovery consolidation.
|
|
18
|
+
* - StateMachineRecoveryManager determines rollback scope from pipeline failedAt state.
|
|
19
|
+
* - Legacy rollback path retained behind LUMENFLOW_LEGACY_ROLLBACK=1 env flag.
|
|
20
|
+
* - All recovery is now centralized through state-machine semantics by default.
|
|
16
21
|
*/
|
|
17
22
|
import { existsSync, readFileSync, unlinkSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
18
23
|
import { join, isAbsolute } from 'node:path';
|
|
@@ -339,4 +344,117 @@ export async function recoverZombieState({ id, doc, _worktreePath, _args }) {
|
|
|
339
344
|
throw createError(ErrorCodes.RECOVERY_ERROR, `Recovery operation failed: ${error.message}\nFiles rolled back to clean state. Re-run wu:done to retry.`, { originalError: error.message, wuId: id });
|
|
340
345
|
}
|
|
341
346
|
}
|
|
347
|
+
// ---------------------------------------------------------------------------
|
|
348
|
+
// WU-1665: State-machine-driven recovery consolidation
|
|
349
|
+
// ---------------------------------------------------------------------------
|
|
350
|
+
/**
|
|
351
|
+
* WU-1665: Environment variable key for legacy rollback compatibility guard.
|
|
352
|
+
* When set to "1", the legacy rollback path is used instead of state-machine-driven recovery.
|
|
353
|
+
*/
|
|
354
|
+
export const LUMENFLOW_LEGACY_ROLLBACK_ENV_KEY = 'LUMENFLOW_LEGACY_ROLLBACK';
|
|
355
|
+
/**
|
|
356
|
+
* WU-1665: Check if legacy rollback mode is enabled via environment variable.
|
|
357
|
+
*
|
|
358
|
+
* During the migration window, operators can set LUMENFLOW_LEGACY_ROLLBACK=1
|
|
359
|
+
* to use the pre-WU-1665 recovery path for rollback operations.
|
|
360
|
+
*
|
|
361
|
+
* @returns {boolean} True if legacy rollback is enabled
|
|
362
|
+
*/
|
|
363
|
+
export function isLegacyRollbackEnabled() {
|
|
364
|
+
return process.env[LUMENFLOW_LEGACY_ROLLBACK_ENV_KEY] === '1';
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* WU-1665: State-machine-driven recovery manager.
|
|
368
|
+
*
|
|
369
|
+
* Determines rollback scope from the pipeline's failedAt state, replacing
|
|
370
|
+
* the ad-hoc per-function rollback logic scattered across wu-recovery.ts,
|
|
371
|
+
* wu-transaction.ts, and rollback-utils.ts.
|
|
372
|
+
*
|
|
373
|
+
* Usage:
|
|
374
|
+
* ```ts
|
|
375
|
+
* const manager = new StateMachineRecoveryManager({
|
|
376
|
+
* wuId: 'WU-1665',
|
|
377
|
+
* failedAt: 'committing',
|
|
378
|
+
* error: 'git commit failed',
|
|
379
|
+
* retryCount: 0,
|
|
380
|
+
* });
|
|
381
|
+
* const scope = manager.getRollbackScope();
|
|
382
|
+
* // scope.snapshotRestore === true
|
|
383
|
+
* // scope.branchRollback === false
|
|
384
|
+
* ```
|
|
385
|
+
*/
|
|
386
|
+
export class StateMachineRecoveryManager {
|
|
387
|
+
wuId;
|
|
388
|
+
failedAt;
|
|
389
|
+
error;
|
|
390
|
+
retryCount;
|
|
391
|
+
constructor(state) {
|
|
392
|
+
this.wuId = state.wuId;
|
|
393
|
+
this.failedAt = state.failedAt;
|
|
394
|
+
this.error = state.error;
|
|
395
|
+
this.retryCount = state.retryCount;
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* Determine rollback scope based on the pipeline stage where failure occurred.
|
|
399
|
+
*
|
|
400
|
+
* The scope is deterministic: given the same failedAt state, the same
|
|
401
|
+
* rollback actions are always prescribed.
|
|
402
|
+
*/
|
|
403
|
+
getRollbackScope() {
|
|
404
|
+
const failedAt = this.failedAt;
|
|
405
|
+
// Pre-write states: nothing to roll back
|
|
406
|
+
if (!failedAt ||
|
|
407
|
+
failedAt === 'validating' ||
|
|
408
|
+
failedAt === 'preparing' ||
|
|
409
|
+
failedAt === 'gating') {
|
|
410
|
+
return {
|
|
411
|
+
snapshotRestore: false,
|
|
412
|
+
branchRollback: false,
|
|
413
|
+
worktreeCleanup: false,
|
|
414
|
+
};
|
|
415
|
+
}
|
|
416
|
+
// Post-push state: push already succeeded, only cleanup remains
|
|
417
|
+
if (failedAt === 'cleaningUp') {
|
|
418
|
+
return {
|
|
419
|
+
snapshotRestore: false,
|
|
420
|
+
branchRollback: false,
|
|
421
|
+
worktreeCleanup: true,
|
|
422
|
+
};
|
|
423
|
+
}
|
|
424
|
+
// Commit-phase failures: files written, need snapshot restore
|
|
425
|
+
if (failedAt === 'committing') {
|
|
426
|
+
return {
|
|
427
|
+
snapshotRestore: true,
|
|
428
|
+
branchRollback: false,
|
|
429
|
+
worktreeCleanup: false,
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
// Merge/push phase failures: committed + potentially merged, need full rollback
|
|
433
|
+
// (merging, pushing)
|
|
434
|
+
return {
|
|
435
|
+
snapshotRestore: true,
|
|
436
|
+
branchRollback: true,
|
|
437
|
+
worktreeCleanup: false,
|
|
438
|
+
};
|
|
439
|
+
}
|
|
440
|
+
/**
|
|
441
|
+
* Serialize recovery state for persistence (e.g., to .lumenflow/recovery/).
|
|
442
|
+
*/
|
|
443
|
+
serialize() {
|
|
444
|
+
return JSON.stringify({
|
|
445
|
+
wuId: this.wuId,
|
|
446
|
+
failedAt: this.failedAt,
|
|
447
|
+
error: this.error,
|
|
448
|
+
retryCount: this.retryCount,
|
|
449
|
+
serializedAt: new Date().toISOString(),
|
|
450
|
+
});
|
|
451
|
+
}
|
|
452
|
+
/**
|
|
453
|
+
* Deserialize recovery state from persisted JSON.
|
|
454
|
+
*/
|
|
455
|
+
static deserialize(json) {
|
|
456
|
+
const data = JSON.parse(json);
|
|
457
|
+
return new StateMachineRecoveryManager(data);
|
|
458
|
+
}
|
|
459
|
+
}
|
|
342
460
|
//# sourceMappingURL=wu-recovery.js.map
|
package/dist/wu-recovery.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wu-recovery.js","sourceRoot":"","sources":["../src/wu-recovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"wu-recovery.js","sourceRoot":"","sources":["../src/wu-recovery.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
export type ValidationPhase = 'intent' | 'structural' | 'reality';
|
|
2
|
+
export interface ValidationIssue {
|
|
3
|
+
code: string;
|
|
4
|
+
severity: 'error' | 'warning';
|
|
5
|
+
message: string;
|
|
6
|
+
suggestion: string;
|
|
7
|
+
metadata?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface WUValidationContextInput {
|
|
10
|
+
id?: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
status?: string;
|
|
13
|
+
code_paths?: unknown;
|
|
14
|
+
tests?: unknown;
|
|
15
|
+
test_paths?: unknown;
|
|
16
|
+
cwd?: string;
|
|
17
|
+
baseRef?: string;
|
|
18
|
+
headRef?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface WUValidationResult {
|
|
21
|
+
valid: boolean;
|
|
22
|
+
issues: ValidationIssue[];
|
|
23
|
+
errors: ValidationIssue[];
|
|
24
|
+
warnings: ValidationIssue[];
|
|
25
|
+
metadata: {
|
|
26
|
+
missingCodePaths: string[];
|
|
27
|
+
missingCoverageCodePaths: string[];
|
|
28
|
+
missingTestPaths: string[];
|
|
29
|
+
changedFiles: string[];
|
|
30
|
+
parityState: CliBinDiffState;
|
|
31
|
+
parityReason?: string;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
export declare const RULE_CODES: {
|
|
35
|
+
readonly CODE_PATH_SHAPE: "R001_CODE_PATH_SHAPE";
|
|
36
|
+
readonly MINIMUM_TEST_INTENT: "R002_MINIMUM_TEST_INTENT";
|
|
37
|
+
readonly CODE_PATH_EXISTENCE: "R003_CODE_PATH_EXISTENCE";
|
|
38
|
+
readonly CODE_PATH_COVERAGE: "R004_CODE_PATH_COVERAGE";
|
|
39
|
+
readonly PARITY_MISSING_SURFACE: "R005_PARITY_MISSING_SURFACE";
|
|
40
|
+
readonly PARITY_UNAVAILABLE: "R005_PARITY_UNAVAILABLE";
|
|
41
|
+
readonly TEST_CLASSIFICATION: "R007_TEST_CLASSIFICATION";
|
|
42
|
+
readonly TEST_EXISTENCE: "R008_TEST_EXISTENCE";
|
|
43
|
+
};
|
|
44
|
+
export declare const CLI_PACKAGE_JSON_PATH = "packages/@lumenflow/cli/package.json";
|
|
45
|
+
export declare const REGISTRATION_SURFACES: {
|
|
46
|
+
readonly PUBLIC_MANIFEST: "packages/@lumenflow/cli/src/public-manifest.ts";
|
|
47
|
+
readonly MCP_TOOLS: "packages/@lumenflow/mcp/src/tools.ts";
|
|
48
|
+
};
|
|
49
|
+
export type CliBinDiffState = 'changed' | 'unchanged' | 'unavailable';
|
|
50
|
+
export interface CliBinDiffResult {
|
|
51
|
+
state: CliBinDiffState;
|
|
52
|
+
reason?: string;
|
|
53
|
+
baseRef?: string;
|
|
54
|
+
headRef: string;
|
|
55
|
+
}
|
|
56
|
+
export type ResolveChangedFilesResult = {
|
|
57
|
+
ok: true;
|
|
58
|
+
files: string[];
|
|
59
|
+
baseRef: string;
|
|
60
|
+
headRef: string;
|
|
61
|
+
} | {
|
|
62
|
+
ok: false;
|
|
63
|
+
reason: string;
|
|
64
|
+
};
|
|
65
|
+
export interface WURuleResolvers {
|
|
66
|
+
pathReferenceExists: (reference: string, cwd: string) => Promise<boolean>;
|
|
67
|
+
resolveChangedFiles: (options: {
|
|
68
|
+
cwd: string;
|
|
69
|
+
baseRef?: string;
|
|
70
|
+
headRef?: string;
|
|
71
|
+
}) => Promise<ResolveChangedFilesResult>;
|
|
72
|
+
resolveCliBinDiff: (options: {
|
|
73
|
+
cwd: string;
|
|
74
|
+
baseRef?: string;
|
|
75
|
+
headRef?: string;
|
|
76
|
+
}) => Promise<CliBinDiffResult>;
|
|
77
|
+
}
|
|
78
|
+
export declare function hasGlobPattern(pathValue: string): boolean;
|
|
79
|
+
export declare function normalizePathForCoverage(pathValue: string): string;
|
|
80
|
+
export declare function isCodePathCoveredByChangedFiles(options: {
|
|
81
|
+
codePath: string;
|
|
82
|
+
changedFiles: string[];
|
|
83
|
+
}): boolean;
|
|
84
|
+
export declare function findMissingCodePathCoverage(options: {
|
|
85
|
+
codePaths: string[];
|
|
86
|
+
changedFiles: string[];
|
|
87
|
+
}): string[];
|
|
88
|
+
export declare function isPathLikeTestEntry(value: string): boolean;
|
|
89
|
+
export declare function validateWURulesSync(input: WUValidationContextInput, options?: {
|
|
90
|
+
phase?: ValidationPhase;
|
|
91
|
+
}): WUValidationResult;
|
|
92
|
+
export declare function validateWURulesWithResolvers(input: WUValidationContextInput, options: {
|
|
93
|
+
phase?: ValidationPhase;
|
|
94
|
+
}, resolvers: WURuleResolvers): Promise<WUValidationResult>;
|
|
95
|
+
//# sourceMappingURL=wu-rules-core.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wu-rules-core.d.ts","sourceRoot":"","sources":["../src/wu-rules-core.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { minimatch } from 'minimatch';
|
|
3
|
+
import { TEST_TYPES, WU_TYPES } from './wu-constants.js';
|
|
4
|
+
export const RULE_CODES = {
|
|
5
|
+
CODE_PATH_SHAPE: 'R001_CODE_PATH_SHAPE',
|
|
6
|
+
MINIMUM_TEST_INTENT: 'R002_MINIMUM_TEST_INTENT',
|
|
7
|
+
CODE_PATH_EXISTENCE: 'R003_CODE_PATH_EXISTENCE',
|
|
8
|
+
CODE_PATH_COVERAGE: 'R004_CODE_PATH_COVERAGE',
|
|
9
|
+
PARITY_MISSING_SURFACE: 'R005_PARITY_MISSING_SURFACE',
|
|
10
|
+
PARITY_UNAVAILABLE: 'R005_PARITY_UNAVAILABLE',
|
|
11
|
+
TEST_CLASSIFICATION: 'R007_TEST_CLASSIFICATION',
|
|
12
|
+
TEST_EXISTENCE: 'R008_TEST_EXISTENCE',
|
|
13
|
+
};
|
|
14
|
+
export const CLI_PACKAGE_JSON_PATH = 'packages/@lumenflow/cli/package.json';
|
|
15
|
+
export const REGISTRATION_SURFACES = {
|
|
16
|
+
PUBLIC_MANIFEST: 'packages/@lumenflow/cli/src/public-manifest.ts',
|
|
17
|
+
MCP_TOOLS: 'packages/@lumenflow/mcp/src/tools.ts',
|
|
18
|
+
};
|
|
19
|
+
const DEFAULT_HEAD_REF = 'HEAD';
|
|
20
|
+
const AUTOMATED_TEST_BUCKETS = ['unit', 'e2e', 'integration'];
|
|
21
|
+
const BASIC_GLOB_CHAR_PATTERN = /[*?[\]{}]/;
|
|
22
|
+
const EXTGLOB_PATTERN = /[@!+*?]\(/;
|
|
23
|
+
function normalizeStringArray(value) {
|
|
24
|
+
if (!Array.isArray(value)) {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
return value
|
|
28
|
+
.filter((entry) => typeof entry === 'string')
|
|
29
|
+
.map((entry) => entry.trim())
|
|
30
|
+
.filter(Boolean);
|
|
31
|
+
}
|
|
32
|
+
function normalizeCodePathsRaw(value) {
|
|
33
|
+
if (!Array.isArray(value)) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
function normalizeTests(testsValue) {
|
|
39
|
+
const testsRecord = testsValue && typeof testsValue === 'object' && !Array.isArray(testsValue)
|
|
40
|
+
? testsValue
|
|
41
|
+
: {};
|
|
42
|
+
return {
|
|
43
|
+
manual: normalizeStringArray(testsRecord[TEST_TYPES.MANUAL]),
|
|
44
|
+
unit: normalizeStringArray(testsRecord[TEST_TYPES.UNIT]),
|
|
45
|
+
e2e: normalizeStringArray(testsRecord[TEST_TYPES.E2E]),
|
|
46
|
+
integration: normalizeStringArray(testsRecord[TEST_TYPES.INTEGRATION]),
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function normalizeContext(input) {
|
|
50
|
+
const testsSource = input.tests && typeof input.tests === 'object'
|
|
51
|
+
? input.tests
|
|
52
|
+
: input.test_paths && typeof input.test_paths === 'object'
|
|
53
|
+
? input.test_paths
|
|
54
|
+
: {};
|
|
55
|
+
const codePathsRaw = normalizeCodePathsRaw(input.code_paths);
|
|
56
|
+
const codePaths = normalizeStringArray(input.code_paths);
|
|
57
|
+
return {
|
|
58
|
+
id: typeof input.id === 'string' && input.id.trim() ? input.id.trim() : '(unknown-wu)',
|
|
59
|
+
type: typeof input.type === 'string' ? input.type : undefined,
|
|
60
|
+
status: typeof input.status === 'string' ? input.status : undefined,
|
|
61
|
+
codePathsRaw,
|
|
62
|
+
codePaths,
|
|
63
|
+
tests: normalizeTests(testsSource),
|
|
64
|
+
cwd: input.cwd?.trim() || process.cwd(),
|
|
65
|
+
baseRef: input.baseRef,
|
|
66
|
+
headRef: input.headRef || DEFAULT_HEAD_REF,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function isDocsOrProcess(type) {
|
|
70
|
+
return type === WU_TYPES.DOCUMENTATION || type === WU_TYPES.PROCESS;
|
|
71
|
+
}
|
|
72
|
+
export function hasGlobPattern(pathValue) {
|
|
73
|
+
return BASIC_GLOB_CHAR_PATTERN.test(pathValue) || EXTGLOB_PATTERN.test(pathValue);
|
|
74
|
+
}
|
|
75
|
+
export function normalizePathForCoverage(pathValue) {
|
|
76
|
+
return pathValue
|
|
77
|
+
.trim()
|
|
78
|
+
.replace(/\\/g, '/')
|
|
79
|
+
.replace(/^\.\//, '')
|
|
80
|
+
.replace(/\/{2,}/g, '/')
|
|
81
|
+
.replace(/\/$/, '');
|
|
82
|
+
}
|
|
83
|
+
function isDirectoryLikeCodePath(codePath) {
|
|
84
|
+
if (codePath.endsWith('/')) {
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
const fileName = path.posix.basename(codePath);
|
|
88
|
+
return !fileName.includes('.');
|
|
89
|
+
}
|
|
90
|
+
function addIssue(issues, issue) {
|
|
91
|
+
issues.push(issue);
|
|
92
|
+
}
|
|
93
|
+
export function isCodePathCoveredByChangedFiles(options) {
|
|
94
|
+
const normalizedCodePath = normalizePathForCoverage(options.codePath);
|
|
95
|
+
if (!normalizedCodePath) {
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
const glob = hasGlobPattern(normalizedCodePath);
|
|
99
|
+
const directoryLike = isDirectoryLikeCodePath(options.codePath);
|
|
100
|
+
return options.changedFiles.some((changedFile) => {
|
|
101
|
+
const normalizedChangedFile = normalizePathForCoverage(changedFile);
|
|
102
|
+
if (!normalizedChangedFile) {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
if (normalizedChangedFile === normalizedCodePath) {
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
if (glob) {
|
|
109
|
+
return minimatch(normalizedChangedFile, normalizedCodePath, { dot: true });
|
|
110
|
+
}
|
|
111
|
+
if (directoryLike) {
|
|
112
|
+
return normalizedChangedFile.startsWith(`${normalizedCodePath}/`);
|
|
113
|
+
}
|
|
114
|
+
return false;
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
export function findMissingCodePathCoverage(options) {
|
|
118
|
+
const { codePaths, changedFiles } = options;
|
|
119
|
+
return codePaths.filter((codePath) => !isCodePathCoveredByChangedFiles({ codePath, changedFiles }));
|
|
120
|
+
}
|
|
121
|
+
export function isPathLikeTestEntry(value) {
|
|
122
|
+
const trimmed = value.trim();
|
|
123
|
+
if (!trimmed) {
|
|
124
|
+
return false;
|
|
125
|
+
}
|
|
126
|
+
// Treat sentence-like entries as prose, not file paths.
|
|
127
|
+
// This avoids misclassifying notes like "N/A - metadata-only changes..." as paths.
|
|
128
|
+
const hasWhitespace = /\s/.test(trimmed);
|
|
129
|
+
const hasGlob = hasGlobPattern(trimmed);
|
|
130
|
+
const hasFileSuffix = /(\.(test|spec)\.[A-Za-z0-9]+|\.[A-Za-z0-9]+)$/.test(trimmed);
|
|
131
|
+
if (hasWhitespace &&
|
|
132
|
+
!trimmed.startsWith('./') &&
|
|
133
|
+
!trimmed.startsWith('../') &&
|
|
134
|
+
!trimmed.startsWith('/') &&
|
|
135
|
+
!hasGlob &&
|
|
136
|
+
!hasFileSuffix) {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
if (trimmed.startsWith('./') || trimmed.startsWith('../') || trimmed.startsWith('/')) {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
if (trimmed.includes('/') || trimmed.includes('\\')) {
|
|
143
|
+
return true;
|
|
144
|
+
}
|
|
145
|
+
if (hasGlobPattern(trimmed)) {
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
if (/\.(test|spec)\.[A-Za-z0-9]+$/i.test(trimmed)) {
|
|
149
|
+
return true;
|
|
150
|
+
}
|
|
151
|
+
if (!trimmed.includes(' ') && /\.[A-Za-z0-9]+$/.test(trimmed)) {
|
|
152
|
+
return true;
|
|
153
|
+
}
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
function validateRule001PathShape(context, issues) {
|
|
157
|
+
context.codePathsRaw.forEach((entry, index) => {
|
|
158
|
+
if (typeof entry !== 'string' || !entry.trim()) {
|
|
159
|
+
addIssue(issues, {
|
|
160
|
+
code: RULE_CODES.CODE_PATH_SHAPE,
|
|
161
|
+
severity: 'error',
|
|
162
|
+
message: `code_paths[${index}] must be a non-empty string path or glob.`,
|
|
163
|
+
suggestion: 'Provide a non-empty path/glob string or remove this entry.',
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
function validateRule002MinimumTestIntent(context, issues) {
|
|
169
|
+
if (isDocsOrProcess(context.type)) {
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
if (context.codePaths.length === 0) {
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
const hasTestIntent = context.tests.manual.length > 0 ||
|
|
176
|
+
context.tests.unit.length > 0 ||
|
|
177
|
+
context.tests.e2e.length > 0 ||
|
|
178
|
+
context.tests.integration.length > 0;
|
|
179
|
+
if (!hasTestIntent) {
|
|
180
|
+
addIssue(issues, {
|
|
181
|
+
code: RULE_CODES.MINIMUM_TEST_INTENT,
|
|
182
|
+
severity: 'error',
|
|
183
|
+
message: 'At least one test entry is required across tests.manual, tests.unit, tests.e2e, or tests.integration.',
|
|
184
|
+
suggestion: 'Add at least one test entry. Use tests.manual for descriptive checks when no automated path applies.',
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function validateRule003CodePathExistence(context, issues, missingCodePaths, pathReferenceExists) {
|
|
189
|
+
const missing = [];
|
|
190
|
+
for (const codePath of context.codePaths) {
|
|
191
|
+
// eslint-disable-next-line no-await-in-loop -- path existence checks are bounded by code_paths length
|
|
192
|
+
const exists = await pathReferenceExists(codePath, context.cwd);
|
|
193
|
+
if (!exists) {
|
|
194
|
+
missing.push(codePath);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
if (missing.length > 0) {
|
|
198
|
+
missingCodePaths.push(...missing);
|
|
199
|
+
addIssue(issues, {
|
|
200
|
+
code: RULE_CODES.CODE_PATH_EXISTENCE,
|
|
201
|
+
severity: 'error',
|
|
202
|
+
message: `code_paths existence check failed for ${missing.length} path(s).`,
|
|
203
|
+
suggestion: 'Create the missing files/glob targets, or update code_paths to match actual repository paths.',
|
|
204
|
+
metadata: { missingCodePaths: missing },
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
async function validateRule004Coverage(context, issues, changedFilesOutput, missingCoverageCodePaths, resolveChangedFiles) {
|
|
209
|
+
if (context.codePaths.length === 0) {
|
|
210
|
+
return;
|
|
211
|
+
}
|
|
212
|
+
const changedFiles = await resolveChangedFiles({
|
|
213
|
+
cwd: context.cwd,
|
|
214
|
+
baseRef: context.baseRef,
|
|
215
|
+
headRef: context.headRef,
|
|
216
|
+
});
|
|
217
|
+
if (!changedFiles.ok) {
|
|
218
|
+
const coverageReason = 'reason' in changedFiles ? changedFiles.reason : 'git diff unavailable';
|
|
219
|
+
missingCoverageCodePaths.push(...context.codePaths);
|
|
220
|
+
addIssue(issues, {
|
|
221
|
+
code: RULE_CODES.CODE_PATH_COVERAGE,
|
|
222
|
+
severity: 'error',
|
|
223
|
+
message: `Unable to evaluate code_paths coverage: ${coverageReason}`,
|
|
224
|
+
suggestion: 'Ensure git diff base is available (origin/main or main) and rerun from the claimed worktree/branch context.',
|
|
225
|
+
});
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
changedFilesOutput.push(...changedFiles.files);
|
|
229
|
+
const missing = findMissingCodePathCoverage({
|
|
230
|
+
codePaths: context.codePaths,
|
|
231
|
+
changedFiles: changedFiles.files,
|
|
232
|
+
});
|
|
233
|
+
if (missing.length > 0) {
|
|
234
|
+
missingCoverageCodePaths.push(...missing);
|
|
235
|
+
addIssue(issues, {
|
|
236
|
+
code: RULE_CODES.CODE_PATH_COVERAGE,
|
|
237
|
+
severity: 'error',
|
|
238
|
+
message: `code_paths coverage failed: ${missing.length} scoped path(s) have no matching branch diff changes.`,
|
|
239
|
+
suggestion: 'Commit changes that touch each missing code_path, or update code_paths to match actual branch scope.',
|
|
240
|
+
metadata: {
|
|
241
|
+
missingCodePaths: missing,
|
|
242
|
+
changedFiles: changedFiles.files,
|
|
243
|
+
baseRef: changedFiles.baseRef,
|
|
244
|
+
headRef: changedFiles.headRef,
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function validateRule007AutomatedTestClassification(context, issues) {
|
|
250
|
+
const pathLikeEntries = {
|
|
251
|
+
unit: [],
|
|
252
|
+
e2e: [],
|
|
253
|
+
integration: [],
|
|
254
|
+
};
|
|
255
|
+
for (const bucket of AUTOMATED_TEST_BUCKETS) {
|
|
256
|
+
for (const entry of context.tests[bucket]) {
|
|
257
|
+
if (!isPathLikeTestEntry(entry)) {
|
|
258
|
+
addIssue(issues, {
|
|
259
|
+
code: RULE_CODES.TEST_CLASSIFICATION,
|
|
260
|
+
severity: 'error',
|
|
261
|
+
message: `tests.${bucket} entry is not path-like: "${entry}".`,
|
|
262
|
+
suggestion: `Move descriptive text to tests.manual and keep tests.${bucket} for file paths/globs only.`,
|
|
263
|
+
metadata: { bucket, value: entry },
|
|
264
|
+
});
|
|
265
|
+
continue;
|
|
266
|
+
}
|
|
267
|
+
pathLikeEntries[bucket].push(entry);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return pathLikeEntries;
|
|
271
|
+
}
|
|
272
|
+
async function validateRule008AutomatedTestExistence(context, issues, pathLikeEntries, missingTestPaths, pathReferenceExists) {
|
|
273
|
+
const missing = [];
|
|
274
|
+
for (const bucket of AUTOMATED_TEST_BUCKETS) {
|
|
275
|
+
for (const testPath of pathLikeEntries[bucket]) {
|
|
276
|
+
// eslint-disable-next-line no-await-in-loop -- bounded by test path list sizes
|
|
277
|
+
const exists = await pathReferenceExists(testPath, context.cwd);
|
|
278
|
+
if (!exists) {
|
|
279
|
+
missing.push(testPath);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
if (missing.length > 0) {
|
|
284
|
+
missingTestPaths.push(...missing);
|
|
285
|
+
addIssue(issues, {
|
|
286
|
+
code: RULE_CODES.TEST_EXISTENCE,
|
|
287
|
+
severity: 'error',
|
|
288
|
+
message: `Automated test path existence failed for ${missing.length} path(s).`,
|
|
289
|
+
suggestion: 'Create the missing automated test files/glob targets, or move non-path notes to tests.manual.',
|
|
290
|
+
metadata: { missingTestPaths: missing },
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
async function validateRule005Parity(context, issues, resolveCliBinDiff) {
|
|
295
|
+
const includesCliPackage = context.codePaths.includes(CLI_PACKAGE_JSON_PATH);
|
|
296
|
+
if (!includesCliPackage) {
|
|
297
|
+
return { state: 'unchanged', headRef: context.headRef };
|
|
298
|
+
}
|
|
299
|
+
const diff = await resolveCliBinDiff({
|
|
300
|
+
cwd: context.cwd,
|
|
301
|
+
baseRef: context.baseRef,
|
|
302
|
+
headRef: context.headRef,
|
|
303
|
+
});
|
|
304
|
+
if (diff.state === 'unavailable') {
|
|
305
|
+
addIssue(issues, {
|
|
306
|
+
code: RULE_CODES.PARITY_UNAVAILABLE,
|
|
307
|
+
severity: 'warning',
|
|
308
|
+
message: `Skipped CLI registration parity check: ${diff.reason || 'bin diff unavailable.'}`,
|
|
309
|
+
suggestion: 'Ensure git base/head refs are available, then rerun reality validation to enforce parity.',
|
|
310
|
+
metadata: {
|
|
311
|
+
baseRef: diff.baseRef,
|
|
312
|
+
headRef: diff.headRef,
|
|
313
|
+
},
|
|
314
|
+
});
|
|
315
|
+
return diff;
|
|
316
|
+
}
|
|
317
|
+
if (diff.state === 'unchanged') {
|
|
318
|
+
return diff;
|
|
319
|
+
}
|
|
320
|
+
const hasPublicManifest = context.codePaths.includes(REGISTRATION_SURFACES.PUBLIC_MANIFEST);
|
|
321
|
+
const hasMcpTools = context.codePaths.includes(REGISTRATION_SURFACES.MCP_TOOLS);
|
|
322
|
+
if (!hasPublicManifest) {
|
|
323
|
+
addIssue(issues, {
|
|
324
|
+
code: RULE_CODES.PARITY_MISSING_SURFACE,
|
|
325
|
+
severity: 'error',
|
|
326
|
+
message: `CLI bin changed but '${REGISTRATION_SURFACES.PUBLIC_MANIFEST}' is missing from code_paths.`,
|
|
327
|
+
suggestion: `Add '${REGISTRATION_SURFACES.PUBLIC_MANIFEST}' to code_paths for CLI registration parity.`,
|
|
328
|
+
metadata: { surface: REGISTRATION_SURFACES.PUBLIC_MANIFEST, baseRef: diff.baseRef },
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
if (!hasMcpTools) {
|
|
332
|
+
addIssue(issues, {
|
|
333
|
+
code: RULE_CODES.PARITY_MISSING_SURFACE,
|
|
334
|
+
severity: 'error',
|
|
335
|
+
message: `CLI bin changed but '${REGISTRATION_SURFACES.MCP_TOOLS}' is missing from code_paths.`,
|
|
336
|
+
suggestion: `Add '${REGISTRATION_SURFACES.MCP_TOOLS}' to code_paths for CLI registration parity.`,
|
|
337
|
+
metadata: { surface: REGISTRATION_SURFACES.MCP_TOOLS, baseRef: diff.baseRef },
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
return diff;
|
|
341
|
+
}
|
|
342
|
+
function finalizeValidation(issues, metadata) {
|
|
343
|
+
const errors = issues.filter((issue) => issue.severity === 'error');
|
|
344
|
+
const warnings = issues.filter((issue) => issue.severity === 'warning');
|
|
345
|
+
return {
|
|
346
|
+
valid: errors.length === 0,
|
|
347
|
+
issues,
|
|
348
|
+
errors,
|
|
349
|
+
warnings,
|
|
350
|
+
metadata,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
function runCommonPhaseRules(context, issues) {
|
|
354
|
+
validateRule001PathShape(context, issues);
|
|
355
|
+
validateRule002MinimumTestIntent(context, issues);
|
|
356
|
+
}
|
|
357
|
+
export function validateWURulesSync(input, options = {}) {
|
|
358
|
+
const phase = options.phase || 'structural';
|
|
359
|
+
if (phase === 'reality') {
|
|
360
|
+
throw new Error('validateWURulesSync does not support phase "reality". Use validateWURulesWithResolvers.');
|
|
361
|
+
}
|
|
362
|
+
const context = normalizeContext(input);
|
|
363
|
+
const issues = [];
|
|
364
|
+
runCommonPhaseRules(context, issues);
|
|
365
|
+
return finalizeValidation(issues, {
|
|
366
|
+
missingCodePaths: [],
|
|
367
|
+
missingCoverageCodePaths: [],
|
|
368
|
+
missingTestPaths: [],
|
|
369
|
+
changedFiles: [],
|
|
370
|
+
parityState: 'unavailable',
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
export async function validateWURulesWithResolvers(input, options = {}, resolvers) {
|
|
374
|
+
const phase = options.phase || 'structural';
|
|
375
|
+
if (phase !== 'reality') {
|
|
376
|
+
return validateWURulesSync(input, { phase });
|
|
377
|
+
}
|
|
378
|
+
const context = normalizeContext(input);
|
|
379
|
+
const issues = [];
|
|
380
|
+
const missingCodePaths = [];
|
|
381
|
+
const missingCoverageCodePaths = [];
|
|
382
|
+
const missingTestPaths = [];
|
|
383
|
+
const changedFiles = [];
|
|
384
|
+
runCommonPhaseRules(context, issues);
|
|
385
|
+
await validateRule003CodePathExistence(context, issues, missingCodePaths, resolvers.pathReferenceExists);
|
|
386
|
+
await validateRule004Coverage(context, issues, changedFiles, missingCoverageCodePaths, resolvers.resolveChangedFiles);
|
|
387
|
+
const parity = await validateRule005Parity(context, issues, resolvers.resolveCliBinDiff);
|
|
388
|
+
const pathLikeEntries = validateRule007AutomatedTestClassification(context, issues);
|
|
389
|
+
await validateRule008AutomatedTestExistence(context, issues, pathLikeEntries, missingTestPaths, resolvers.pathReferenceExists);
|
|
390
|
+
return finalizeValidation(issues, {
|
|
391
|
+
missingCodePaths,
|
|
392
|
+
missingCoverageCodePaths,
|
|
393
|
+
missingTestPaths,
|
|
394
|
+
changedFiles,
|
|
395
|
+
parityState: parity.state,
|
|
396
|
+
parityReason: parity.reason,
|
|
397
|
+
});
|
|
398
|
+
}
|
|
399
|
+
//# sourceMappingURL=wu-rules-core.js.map
|