@veraxhq/verax 0.2.0 → 0.3.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/README.md +14 -18
- package/bin/verax.js +7 -0
- package/package.json +15 -5
- package/src/cli/commands/baseline.js +104 -0
- package/src/cli/commands/default.js +323 -111
- package/src/cli/commands/doctor.js +36 -4
- package/src/cli/commands/ga.js +243 -0
- package/src/cli/commands/gates.js +95 -0
- package/src/cli/commands/inspect.js +131 -2
- package/src/cli/commands/release-check.js +213 -0
- package/src/cli/commands/run.js +498 -103
- package/src/cli/commands/security-check.js +211 -0
- package/src/cli/commands/truth.js +114 -0
- package/src/cli/entry.js +305 -68
- package/src/cli/util/angular-component-extractor.js +179 -0
- package/src/cli/util/angular-navigation-detector.js +141 -0
- package/src/cli/util/angular-network-detector.js +161 -0
- package/src/cli/util/angular-state-detector.js +162 -0
- package/src/cli/util/ast-interactive-detector.js +546 -0
- package/src/cli/util/ast-network-detector.js +603 -0
- package/src/cli/util/ast-usestate-detector.js +602 -0
- package/src/cli/util/bootstrap-guard.js +86 -0
- package/src/cli/util/detection-engine.js +4 -3
- package/src/cli/util/determinism-runner.js +123 -0
- package/src/cli/util/determinism-writer.js +129 -0
- package/src/cli/util/env-url.js +4 -0
- package/src/cli/util/events.js +76 -0
- package/src/cli/util/expectation-extractor.js +380 -74
- package/src/cli/util/findings-writer.js +126 -15
- package/src/cli/util/learn-writer.js +3 -1
- package/src/cli/util/observation-engine.js +69 -23
- package/src/cli/util/observe-writer.js +3 -1
- package/src/cli/util/paths.js +6 -14
- package/src/cli/util/project-discovery.js +23 -0
- package/src/cli/util/project-writer.js +3 -1
- package/src/cli/util/redact.js +2 -2
- package/src/cli/util/run-resolver.js +64 -0
- package/src/cli/util/runtime-budget.js +147 -0
- package/src/cli/util/source-requirement.js +55 -0
- package/src/cli/util/summary-writer.js +13 -1
- package/src/cli/util/svelte-navigation-detector.js +163 -0
- package/src/cli/util/svelte-network-detector.js +80 -0
- package/src/cli/util/svelte-sfc-extractor.js +147 -0
- package/src/cli/util/svelte-state-detector.js +243 -0
- package/src/cli/util/vue-navigation-detector.js +177 -0
- package/src/cli/util/vue-sfc-extractor.js +162 -0
- package/src/cli/util/vue-state-detector.js +215 -0
- package/src/types/global.d.ts +28 -0
- package/src/types/ts-ast.d.ts +24 -0
- package/src/verax/cli/doctor.js +2 -2
- package/src/verax/cli/finding-explainer.js +56 -3
- package/src/verax/cli/init.js +1 -1
- package/src/verax/cli/url-safety.js +12 -2
- package/src/verax/cli/wizard.js +13 -2
- package/src/verax/core/artifacts/registry.js +154 -0
- package/src/verax/core/artifacts/verifier.js +980 -0
- package/src/verax/core/baseline/baseline.enforcer.js +137 -0
- package/src/verax/core/baseline/baseline.snapshot.js +231 -0
- package/src/verax/core/budget-engine.js +1 -1
- package/src/verax/core/capabilities/gates.js +499 -0
- package/src/verax/core/capabilities/registry.js +475 -0
- package/src/verax/core/confidence/confidence-compute.js +137 -0
- package/src/verax/core/confidence/confidence-invariants.js +234 -0
- package/src/verax/core/confidence/confidence-report-writer.js +112 -0
- package/src/verax/core/confidence/confidence-weights.js +44 -0
- package/src/verax/core/confidence/confidence.defaults.js +65 -0
- package/src/verax/core/confidence/confidence.loader.js +79 -0
- package/src/verax/core/confidence/confidence.schema.js +94 -0
- package/src/verax/core/confidence-engine-refactor.js +484 -0
- package/src/verax/core/confidence-engine.js +486 -0
- package/src/verax/core/confidence-engine.js.backup +471 -0
- package/src/verax/core/contracts/index.js +29 -0
- package/src/verax/core/contracts/types.js +185 -0
- package/src/verax/core/contracts/validators.js +381 -0
- package/src/verax/core/decision-snapshot.js +31 -4
- package/src/verax/core/decisions/decision.trace.js +276 -0
- package/src/verax/core/determinism/contract-writer.js +89 -0
- package/src/verax/core/determinism/contract.js +139 -0
- package/src/verax/core/determinism/diff.js +364 -0
- package/src/verax/core/determinism/engine.js +221 -0
- package/src/verax/core/determinism/finding-identity.js +148 -0
- package/src/verax/core/determinism/normalize.js +438 -0
- package/src/verax/core/determinism/report-writer.js +92 -0
- package/src/verax/core/determinism/run-fingerprint.js +118 -0
- package/src/verax/core/determinism-model.js +35 -6
- package/src/verax/core/dynamic-route-intelligence.js +528 -0
- package/src/verax/core/evidence/evidence-capture-service.js +307 -0
- package/src/verax/core/evidence/evidence-intent-ledger.js +165 -0
- package/src/verax/core/evidence-builder.js +487 -0
- package/src/verax/core/execution-mode-context.js +77 -0
- package/src/verax/core/execution-mode-detector.js +190 -0
- package/src/verax/core/failures/exit-codes.js +86 -0
- package/src/verax/core/failures/failure-summary.js +76 -0
- package/src/verax/core/failures/failure.factory.js +225 -0
- package/src/verax/core/failures/failure.ledger.js +132 -0
- package/src/verax/core/failures/failure.types.js +196 -0
- package/src/verax/core/failures/index.js +10 -0
- package/src/verax/core/ga/ga-report-writer.js +43 -0
- package/src/verax/core/ga/ga.artifact.js +49 -0
- package/src/verax/core/ga/ga.contract.js +434 -0
- package/src/verax/core/ga/ga.enforcer.js +86 -0
- package/src/verax/core/guardrails/guardrails-report-writer.js +109 -0
- package/src/verax/core/guardrails/policy.defaults.js +210 -0
- package/src/verax/core/guardrails/policy.loader.js +83 -0
- package/src/verax/core/guardrails/policy.schema.js +110 -0
- package/src/verax/core/guardrails/truth-reconciliation.js +136 -0
- package/src/verax/core/guardrails-engine.js +505 -0
- package/src/verax/core/incremental-store.js +15 -7
- package/src/verax/core/observe/run-timeline.js +316 -0
- package/src/verax/core/perf/perf.contract.js +186 -0
- package/src/verax/core/perf/perf.display.js +65 -0
- package/src/verax/core/perf/perf.enforcer.js +91 -0
- package/src/verax/core/perf/perf.monitor.js +209 -0
- package/src/verax/core/perf/perf.report.js +198 -0
- package/src/verax/core/pipeline-tracker.js +238 -0
- package/src/verax/core/product-definition.js +127 -0
- package/src/verax/core/release/provenance.builder.js +271 -0
- package/src/verax/core/release/release-report-writer.js +40 -0
- package/src/verax/core/release/release.enforcer.js +159 -0
- package/src/verax/core/release/reproducibility.check.js +221 -0
- package/src/verax/core/release/sbom.builder.js +283 -0
- package/src/verax/core/replay-validator.js +4 -4
- package/src/verax/core/replay.js +1 -1
- package/src/verax/core/report/cross-index.js +192 -0
- package/src/verax/core/report/human-summary.js +222 -0
- package/src/verax/core/route-intelligence.js +419 -0
- package/src/verax/core/security/secrets.scan.js +326 -0
- package/src/verax/core/security/security-report.js +50 -0
- package/src/verax/core/security/security.enforcer.js +124 -0
- package/src/verax/core/security/supplychain.defaults.json +38 -0
- package/src/verax/core/security/supplychain.policy.js +326 -0
- package/src/verax/core/security/vuln.scan.js +265 -0
- package/src/verax/core/silence-impact.js +1 -1
- package/src/verax/core/silence-model.js +9 -7
- package/src/verax/core/truth/truth.certificate.js +250 -0
- package/src/verax/core/ui-feedback-intelligence.js +515 -0
- package/src/verax/detect/comparison.js +8 -3
- package/src/verax/detect/confidence-engine.js +645 -57
- package/src/verax/detect/confidence-helper.js +33 -0
- package/src/verax/detect/detection-engine.js +19 -2
- package/src/verax/detect/dynamic-route-findings.js +335 -0
- package/src/verax/detect/evidence-index.js +15 -65
- package/src/verax/detect/expectation-chain-detector.js +417 -0
- package/src/verax/detect/expectation-model.js +56 -3
- package/src/verax/detect/explanation-helpers.js +1 -1
- package/src/verax/detect/finding-detector.js +2 -2
- package/src/verax/detect/findings-writer.js +149 -20
- package/src/verax/detect/flow-detector.js +4 -4
- package/src/verax/detect/index.js +265 -15
- package/src/verax/detect/interactive-findings.js +3 -4
- package/src/verax/detect/journey-stall-detector.js +558 -0
- package/src/verax/detect/route-findings.js +218 -0
- package/src/verax/detect/signal-mapper.js +2 -2
- package/src/verax/detect/skip-classifier.js +4 -4
- package/src/verax/detect/ui-feedback-findings.js +207 -0
- package/src/verax/detect/verdict-engine.js +61 -9
- package/src/verax/detect/view-switch-correlator.js +242 -0
- package/src/verax/flow/flow-engine.js +3 -2
- package/src/verax/flow/flow-spec.js +1 -2
- package/src/verax/index.js +413 -33
- package/src/verax/intel/effect-detector.js +1 -1
- package/src/verax/intel/index.js +2 -2
- package/src/verax/intel/route-extractor.js +3 -3
- package/src/verax/intel/vue-navigation-extractor.js +81 -18
- package/src/verax/intel/vue-router-extractor.js +4 -2
- package/src/verax/learn/action-contract-extractor.js +684 -66
- package/src/verax/learn/ast-contract-extractor.js +53 -1
- package/src/verax/learn/index.js +36 -2
- package/src/verax/learn/manifest-writer.js +28 -14
- package/src/verax/learn/route-extractor.js +1 -1
- package/src/verax/learn/route-validator.js +12 -8
- package/src/verax/learn/state-extractor.js +1 -1
- package/src/verax/learn/static-extractor-navigation.js +1 -1
- package/src/verax/learn/static-extractor-validation.js +2 -2
- package/src/verax/learn/static-extractor.js +8 -7
- package/src/verax/learn/ts-contract-resolver.js +14 -12
- package/src/verax/observe/browser.js +22 -3
- package/src/verax/observe/console-sensor.js +2 -2
- package/src/verax/observe/expectation-executor.js +2 -1
- package/src/verax/observe/focus-sensor.js +1 -1
- package/src/verax/observe/human-driver.js +29 -10
- package/src/verax/observe/index.js +92 -844
- package/src/verax/observe/interaction-discovery.js +27 -15
- package/src/verax/observe/interaction-runner.js +31 -14
- package/src/verax/observe/loading-sensor.js +6 -0
- package/src/verax/observe/navigation-sensor.js +1 -1
- package/src/verax/observe/observe-context.js +205 -0
- package/src/verax/observe/observe-helpers.js +191 -0
- package/src/verax/observe/observe-runner.js +226 -0
- package/src/verax/observe/observers/budget-observer.js +185 -0
- package/src/verax/observe/observers/console-observer.js +102 -0
- package/src/verax/observe/observers/coverage-observer.js +107 -0
- package/src/verax/observe/observers/interaction-observer.js +471 -0
- package/src/verax/observe/observers/navigation-observer.js +132 -0
- package/src/verax/observe/observers/network-observer.js +87 -0
- package/src/verax/observe/observers/safety-observer.js +82 -0
- package/src/verax/observe/observers/ui-feedback-observer.js +99 -0
- package/src/verax/observe/settle.js +1 -0
- package/src/verax/observe/state-sensor.js +8 -4
- package/src/verax/observe/state-ui-sensor.js +7 -1
- package/src/verax/observe/traces-writer.js +27 -16
- package/src/verax/observe/ui-feedback-detector.js +742 -0
- package/src/verax/observe/ui-signal-sensor.js +155 -2
- package/src/verax/scan-summary-writer.js +46 -9
- package/src/verax/shared/artifact-manager.js +9 -6
- package/src/verax/shared/budget-profiles.js +2 -2
- package/src/verax/shared/caching.js +1 -1
- package/src/verax/shared/config-loader.js +1 -2
- package/src/verax/shared/css-spinner-rules.js +204 -0
- package/src/verax/shared/dynamic-route-utils.js +12 -6
- package/src/verax/shared/retry-policy.js +1 -6
- package/src/verax/shared/root-artifacts.js +1 -1
- package/src/verax/shared/view-switch-rules.js +208 -0
- package/src/verax/shared/zip-artifacts.js +1 -0
- package/src/verax/validate/context-validator.js +1 -1
- package/src/verax/observe/index.js.backup +0 -1
- package/src/verax/validate/context-validator.js.bak +0 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PHASE 21.5 — Unified Failure Taxonomy
|
|
3
|
+
*
|
|
4
|
+
* Every failure in VERAX must be classified using this taxonomy.
|
|
5
|
+
* No ad-hoc errors, no string-based exceptions.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Failure Categories
|
|
10
|
+
*/
|
|
11
|
+
export const FAILURE_CATEGORY = {
|
|
12
|
+
EVIDENCE: 'EVIDENCE', // Evidence Law violations
|
|
13
|
+
DETERMINISM: 'DETERMINISM', // Determinism violations
|
|
14
|
+
OBSERVE: 'OBSERVE', // Observation phase failures
|
|
15
|
+
DETECT: 'DETECT', // Detection phase failures
|
|
16
|
+
VERIFY: 'VERIFY', // Verification failures
|
|
17
|
+
REPORT: 'REPORT', // Reporting failures
|
|
18
|
+
CONTRACT: 'CONTRACT', // Contract/invariant violations
|
|
19
|
+
POLICY: 'POLICY', // Policy validation failures
|
|
20
|
+
IO: 'IO', // File I/O failures
|
|
21
|
+
INTERNAL: 'INTERNAL' // Internal system errors
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Failure Severity
|
|
26
|
+
*/
|
|
27
|
+
export const FAILURE_SEVERITY = {
|
|
28
|
+
BLOCKING: 'BLOCKING', // Execution must stop
|
|
29
|
+
DEGRADED: 'DEGRADED', // Execution continues, verdict downgraded
|
|
30
|
+
WARNING: 'WARNING' // Execution continues, recorded only
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Execution Phase
|
|
35
|
+
*/
|
|
36
|
+
export const EXECUTION_PHASE = {
|
|
37
|
+
LEARN: 'LEARN',
|
|
38
|
+
OBSERVE: 'OBSERVE',
|
|
39
|
+
DETECT: 'DETECT',
|
|
40
|
+
WRITE: 'WRITE',
|
|
41
|
+
VERIFY: 'VERIFY',
|
|
42
|
+
VERDICT: 'VERDICT',
|
|
43
|
+
REPORT: 'REPORT'
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Stable Failure Codes
|
|
48
|
+
*
|
|
49
|
+
* Each code is stable and machine-readable.
|
|
50
|
+
* Used for deterministic failure classification.
|
|
51
|
+
*/
|
|
52
|
+
export const FAILURE_CODE = {
|
|
53
|
+
// Evidence Law Failures
|
|
54
|
+
EVIDENCE_INCOMPLETE: 'EVIDENCE_INCOMPLETE',
|
|
55
|
+
EVIDENCE_MISSING_REQUIRED: 'EVIDENCE_MISSING_REQUIRED',
|
|
56
|
+
EVIDENCE_CORRUPTED: 'EVIDENCE_CORRUPTED',
|
|
57
|
+
EVIDENCE_LAW_VIOLATION: 'EVIDENCE_LAW_VIOLATION',
|
|
58
|
+
|
|
59
|
+
// Determinism Failures
|
|
60
|
+
DETERMINISM_ADAPTIVE_DETECTED: 'DETERMINISM_ADAPTIVE_DETECTED',
|
|
61
|
+
DETERMINISM_NON_REPRODUCIBLE: 'DETERMINISM_NON_REPRODUCIBLE',
|
|
62
|
+
DETERMINISM_TRUTH_VIOLATION: 'DETERMINISM_TRUTH_VIOLATION',
|
|
63
|
+
|
|
64
|
+
// Observation Failures
|
|
65
|
+
OBSERVE_NAVIGATION_FAILED: 'OBSERVE_NAVIGATION_FAILED',
|
|
66
|
+
OBSERVE_INTERACTION_FAILED: 'OBSERVE_INTERACTION_FAILED',
|
|
67
|
+
OBSERVE_SENSOR_FAILED: 'OBSERVE_SENSOR_FAILED',
|
|
68
|
+
OBSERVE_TIMEOUT: 'OBSERVE_TIMEOUT',
|
|
69
|
+
OBSERVE_BUDGET_EXCEEDED: 'OBSERVE_BUDGET_EXCEEDED',
|
|
70
|
+
OBSERVE_BROWSER_CRASH: 'OBSERVE_BROWSER_CRASH',
|
|
71
|
+
|
|
72
|
+
// Detection Failures
|
|
73
|
+
DETECT_FINDING_PROCESSING_FAILED: 'DETECT_FINDING_PROCESSING_FAILED',
|
|
74
|
+
DETECT_CONFIDENCE_COMPUTATION_FAILED: 'DETECT_CONFIDENCE_COMPUTATION_FAILED',
|
|
75
|
+
DETECT_GUARDRAILS_FAILED: 'DETECT_GUARDRAILS_FAILED',
|
|
76
|
+
DETECT_EVIDENCE_BUILD_FAILED: 'DETECT_EVIDENCE_BUILD_FAILED',
|
|
77
|
+
|
|
78
|
+
// Verification Failures
|
|
79
|
+
VERIFY_ARTIFACT_CORRUPTED: 'VERIFY_ARTIFACT_CORRUPTED',
|
|
80
|
+
VERIFY_HASH_MISMATCH: 'VERIFY_HASH_MISMATCH',
|
|
81
|
+
VERIFY_INTEGRITY_VIOLATION: 'VERIFY_INTEGRITY_VIOLATION',
|
|
82
|
+
VERIFICATION_FAILED: 'VERIFICATION_FAILED',
|
|
83
|
+
|
|
84
|
+
// Verdict Failures
|
|
85
|
+
VERDICT_COMPUTATION_FAILED: 'VERDICT_COMPUTATION_FAILED',
|
|
86
|
+
|
|
87
|
+
// Observation Execution Failures
|
|
88
|
+
OBSERVE_EXECUTION_FAILED: 'OBSERVE_EXECUTION_FAILED',
|
|
89
|
+
|
|
90
|
+
// Reporting Failures
|
|
91
|
+
REPORT_WRITE_FAILED: 'REPORT_WRITE_FAILED',
|
|
92
|
+
REPORT_SERIALIZATION_FAILED: 'REPORT_SERIALIZATION_FAILED',
|
|
93
|
+
|
|
94
|
+
// Contract Failures
|
|
95
|
+
CONTRACT_INVARIANT_VIOLATION: 'CONTRACT_INVARIANT_VIOLATION',
|
|
96
|
+
CONTRACT_PRECONDITION_FAILED: 'CONTRACT_PRECONDITION_FAILED',
|
|
97
|
+
CONTRACT_POSTCONDITION_FAILED: 'CONTRACT_POSTCONDITION_FAILED',
|
|
98
|
+
|
|
99
|
+
// Policy Failures
|
|
100
|
+
POLICY_INVALID: 'POLICY_INVALID',
|
|
101
|
+
POLICY_LOAD_FAILED: 'POLICY_LOAD_FAILED',
|
|
102
|
+
POLICY_VALIDATION_FAILED: 'POLICY_VALIDATION_FAILED',
|
|
103
|
+
|
|
104
|
+
// I/O Failures
|
|
105
|
+
IO_READ_FAILED: 'IO_READ_FAILED',
|
|
106
|
+
IO_WRITE_FAILED: 'IO_WRITE_FAILED',
|
|
107
|
+
IO_FILE_NOT_FOUND: 'IO_FILE_NOT_FOUND',
|
|
108
|
+
IO_PERMISSION_DENIED: 'IO_PERMISSION_DENIED',
|
|
109
|
+
|
|
110
|
+
// Internal Failures
|
|
111
|
+
INTERNAL_UNEXPECTED_ERROR: 'INTERNAL_UNEXPECTED_ERROR',
|
|
112
|
+
INTERNAL_STATE_CORRUPTION: 'INTERNAL_STATE_CORRUPTION',
|
|
113
|
+
INTERNAL_ASSERTION_FAILED: 'INTERNAL_ASSERTION_FAILED',
|
|
114
|
+
|
|
115
|
+
// Baseline Failures (PHASE 21.11)
|
|
116
|
+
BASELINE_DRIFT: 'BASELINE_DRIFT'
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Failure Object Structure
|
|
121
|
+
*
|
|
122
|
+
* @typedef {Object} Failure
|
|
123
|
+
* @property {string} code - Stable failure code (from FAILURE_CODE)
|
|
124
|
+
* @property {string} category - Failure category (from FAILURE_CATEGORY)
|
|
125
|
+
* @property {string} severity - Failure severity (from FAILURE_SEVERITY)
|
|
126
|
+
* @property {string} phase - Execution phase (from EXECUTION_PHASE)
|
|
127
|
+
* @property {boolean} isRecoverable - Whether failure can be recovered
|
|
128
|
+
* @property {string} message - Human-readable message
|
|
129
|
+
* @property {string} component - Component where failure occurred
|
|
130
|
+
* @property {number} timestamp - Timestamp of failure
|
|
131
|
+
* @property {Object} context - Additional context
|
|
132
|
+
* @property {string} [stack] - Stack trace (if internal error)
|
|
133
|
+
* @property {string} [recoveryAction] - Recovery action taken (if any)
|
|
134
|
+
* @property {string} [impact] - Impact on verdict/execution
|
|
135
|
+
*/
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Validate failure object
|
|
139
|
+
*
|
|
140
|
+
* @param {Object} failure - Failure object to validate
|
|
141
|
+
* @throws {Error} If failure is invalid
|
|
142
|
+
*/
|
|
143
|
+
export function validateFailure(failure) {
|
|
144
|
+
if (!failure) {
|
|
145
|
+
throw new Error('Failure object is required');
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
if (!failure.code || typeof failure.code !== 'string') {
|
|
149
|
+
throw new Error('Failure must have a code string');
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (!Object.values(FAILURE_CODE).includes(failure.code)) {
|
|
153
|
+
throw new Error(`Invalid failure code: ${failure.code}`);
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (!failure.category || typeof failure.category !== 'string') {
|
|
157
|
+
throw new Error('Failure must have a category string');
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
if (!Object.values(FAILURE_CATEGORY).includes(failure.category)) {
|
|
161
|
+
throw new Error(`Invalid failure category: ${failure.category}`);
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
if (!failure.severity || typeof failure.severity !== 'string') {
|
|
165
|
+
throw new Error('Failure must have a severity string');
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
if (!Object.values(FAILURE_SEVERITY).includes(failure.severity)) {
|
|
169
|
+
throw new Error(`Invalid failure severity: ${failure.severity}`);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
if (!failure.phase || typeof failure.phase !== 'string') {
|
|
173
|
+
throw new Error('Failure must have a phase string');
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
if (!Object.values(EXECUTION_PHASE).includes(failure.phase)) {
|
|
177
|
+
throw new Error(`Invalid execution phase: ${failure.phase}`);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
if (typeof failure.isRecoverable !== 'boolean') {
|
|
181
|
+
throw new Error('Failure must have isRecoverable boolean');
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (!failure.message || typeof failure.message !== 'string') {
|
|
185
|
+
throw new Error('Failure must have a message string');
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
if (!failure.component || typeof failure.component !== 'string') {
|
|
189
|
+
throw new Error('Failure must have a component string');
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
if (typeof failure.timestamp !== 'number') {
|
|
193
|
+
throw new Error('Failure must have a timestamp number');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Failures module exports
|
|
3
|
+
* Central export point for failure-related types and utilities
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
export { FAILURE_CODE, EXECUTION_PHASE, FAILURE_SEVERITY, FAILURE_CATEGORY } from './failure.types.js';
|
|
7
|
+
export { FailureLedger } from './failure.ledger.js';
|
|
8
|
+
export { errorToFailure, createIOFailure, createInternalFailure } from './failure.factory.js';
|
|
9
|
+
export { formatFailureSummary, getExitCodeFromLedger } from './failure-summary.js';
|
|
10
|
+
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ENTERPRISE READINESS — GA Report Writer
|
|
3
|
+
*
|
|
4
|
+
* Writes ga.report.json artifact with GA readiness evaluation results.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { writeFileSync, mkdirSync, existsSync } from 'fs';
|
|
8
|
+
import { resolve } from 'path';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Write GA report
|
|
12
|
+
*
|
|
13
|
+
* @param {string} projectDir - Project directory
|
|
14
|
+
* @param {string} runId - Run ID
|
|
15
|
+
* @param {Object} gaResult - GA readiness evaluation result
|
|
16
|
+
* @returns {string} Path to written file
|
|
17
|
+
*/
|
|
18
|
+
export function writeGAReport(projectDir, runId, gaResult) {
|
|
19
|
+
const outputDir = resolve(projectDir, '.verax', 'security');
|
|
20
|
+
if (!existsSync(outputDir)) {
|
|
21
|
+
mkdirSync(outputDir, { recursive: true });
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const reportPath = resolve(outputDir, 'ga.report.json');
|
|
25
|
+
|
|
26
|
+
const report = {
|
|
27
|
+
contractVersion: 1,
|
|
28
|
+
generatedAt: new Date().toISOString(),
|
|
29
|
+
runId,
|
|
30
|
+
gaReady: gaResult.pass,
|
|
31
|
+
blockers: gaResult.blockers || [],
|
|
32
|
+
warnings: gaResult.warnings || [],
|
|
33
|
+
summary: gaResult.summary || {},
|
|
34
|
+
inputs: gaResult.inputs || {},
|
|
35
|
+
failureCodes: gaResult.blockers?.map(b => b.code) || [],
|
|
36
|
+
warningCodes: gaResult.warnings?.map(w => w.code) || []
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
writeFileSync(reportPath, JSON.stringify(report, null, 2), 'utf-8');
|
|
40
|
+
|
|
41
|
+
return reportPath;
|
|
42
|
+
}
|
|
43
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PHASE 21.6 — GA Status Artifact Writer
|
|
3
|
+
*
|
|
4
|
+
* Writes GA readiness status to ga.status.json
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { writeFileSync, mkdirSync } from 'fs';
|
|
8
|
+
import { resolve, dirname } from 'path';
|
|
9
|
+
import { buildBaselineSnapshot, writeBaselineSnapshot } from '../baseline/baseline.snapshot.js';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Write GA status artifact
|
|
13
|
+
*
|
|
14
|
+
* @param {string} projectDir - Project directory
|
|
15
|
+
* @param {string} runId - Run ID
|
|
16
|
+
* @param {Object} gaResult - GA readiness result
|
|
17
|
+
* @returns {string} Path to artifact
|
|
18
|
+
*/
|
|
19
|
+
export function writeGAStatus(projectDir, runId, gaResult) {
|
|
20
|
+
const runsDir = resolve(projectDir, '.verax', 'runs', runId);
|
|
21
|
+
mkdirSync(runsDir, { recursive: true });
|
|
22
|
+
|
|
23
|
+
const artifactPath = resolve(runsDir, 'ga.status.json');
|
|
24
|
+
|
|
25
|
+
const artifact = {
|
|
26
|
+
gaReady: gaResult.pass,
|
|
27
|
+
checkedAt: gaResult.summary.checkedAt,
|
|
28
|
+
blockers: gaResult.blockers,
|
|
29
|
+
warnings: gaResult.warnings,
|
|
30
|
+
summary: gaResult.summary,
|
|
31
|
+
inputs: gaResult.inputs
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
writeFileSync(artifactPath, JSON.stringify(artifact, null, 2), 'utf-8');
|
|
35
|
+
|
|
36
|
+
// PHASE 21.11: Freeze baseline when GA-READY
|
|
37
|
+
if (gaResult.pass) {
|
|
38
|
+
try {
|
|
39
|
+
const baseline = buildBaselineSnapshot(projectDir);
|
|
40
|
+
writeBaselineSnapshot(projectDir, baseline, true); // true = GA-READY, freeze it
|
|
41
|
+
} catch (error) {
|
|
42
|
+
// Baseline freeze failure is not fatal, but should be logged
|
|
43
|
+
console.error(`Warning: Failed to freeze baseline: ${error.message}`);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
return artifactPath;
|
|
48
|
+
}
|
|
49
|
+
|