@dailephd/my-dev-kit-lab 0.4.2 → 0.4.4
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 +28 -113
- package/benchmarks/contracts/todo-behavior.md +1 -1
- package/benchmarks/projects/task-analytics-large-mixed/README.md +2 -0
- package/benchmarks/projects/task-workflow-medium-ts/README.md +3 -1
- package/dist/src/evaluation/stageContextDeterminism/calculateStageContextDeterminism.js +52 -0
- package/dist/src/evaluation/stageContextDeterminism/canonicalizeStageContextRun.js +53 -0
- package/dist/src/evaluation/stageContextDeterminism/index.js +2 -0
- package/dist/src/evaluation/stageContextDeterminism/types.js +1 -0
- package/dist/src/evaluation/stageContextExpectations/index.js +2 -0
- package/dist/src/evaluation/stageContextExpectations/producerReadinessExpectationTypes.js +8 -0
- package/dist/src/evaluation/stageContextExpectations/readStageContextExpectationFixtureV1.js +50 -0
- package/dist/src/evaluation/stageContextExpectations/readTypes.js +1 -0
- package/dist/src/evaluation/stageContextExpectations/types.js +1 -0
- package/dist/src/evaluation/stageContextExpectations/validation.js +768 -0
- package/dist/src/evaluation/stageContextMetrics/calculateAllocationMetrics.js +96 -0
- package/dist/src/evaluation/stageContextMetrics/calculateArtifactStateMetrics.js +130 -0
- package/dist/src/evaluation/stageContextMetrics/calculateContextSizeMetrics.js +85 -0
- package/dist/src/evaluation/stageContextMetrics/calculateCriticalityMetrics.js +112 -0
- package/dist/src/evaluation/stageContextMetrics/calculateExpectationMetrics.js +103 -0
- package/dist/src/evaluation/stageContextMetrics/calculateOwnerMetrics.js +84 -0
- package/dist/src/evaluation/stageContextMetrics/calculateReadinessAgreement.js +152 -0
- package/dist/src/evaluation/stageContextMetrics/calculateResponsibilityMappingMetrics.js +36 -0
- package/dist/src/evaluation/stageContextMetrics/calculateSupplementalRawAgreement.js +50 -0
- package/dist/src/evaluation/stageContextMetrics/calculateTruncationClassification.js +44 -0
- package/dist/src/evaluation/stageContextMetrics/collectContextCapsuleEvidence.js +312 -0
- package/dist/src/evaluation/stageContextMetrics/collectRetrievalAuditEvidence.js +35 -0
- package/dist/src/evaluation/stageContextMetrics/collectWorkflowInstructionEvidence.js +137 -0
- package/dist/src/evaluation/stageContextMetrics/evaluateProducerReadinessBridge.js +127 -0
- package/dist/src/evaluation/stageContextMetrics/evaluateV043StageContextExecution.js +247 -0
- package/dist/src/evaluation/stageContextMetrics/index.js +17 -0
- package/dist/src/evaluation/stageContextMetrics/matchStageContextExpectations.js +38 -0
- package/dist/src/evaluation/stageContextMetrics/producerReadinessMetricTypes.js +1 -0
- package/dist/src/evaluation/stageContextMetrics/targetKeys.js +35 -0
- package/dist/src/evaluation/stageContextMetrics/types.js +1 -0
- package/dist/src/evaluation/stageContextSelectors/contextArtifactConsistency.js +89 -0
- package/dist/src/evaluation/stageContextSelectors/contextCapsuleSelectors.js +126 -0
- package/dist/src/evaluation/stageContextSelectors/index.js +4 -0
- package/dist/src/evaluation/stageContextSelectors/retrievalAuditRecordSelectors.js +54 -0
- package/dist/src/evaluation/stageContextSelectors/workflowInstructionPacketSelectors.js +51 -0
- package/dist/src/evaluation/targetImmutability/captureTargetSnapshot.js +208 -0
- package/dist/src/evaluation/targetImmutability/compareTargetSnapshots.js +56 -0
- package/dist/src/evaluation/targetImmutability/index.js +3 -0
- package/dist/src/evaluation/targetImmutability/types.js +1 -0
- package/dist/src/evaluation/targetImmutability/validateTargetImmutabilityConfig.js +130 -0
- package/dist/src/evaluation/upstreamArtifacts/artifactReadTypes.js +1 -0
- package/dist/src/evaluation/upstreamArtifacts/index.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/jsonTypes.js +1 -0
- package/dist/src/evaluation/upstreamArtifacts/myDevKitClassificationTypesV1.js +1 -0
- package/dist/src/evaluation/upstreamArtifacts/myDevKitContextArtifactsV1.js +1 -0
- package/dist/src/evaluation/upstreamArtifacts/myDevKitSemanticTypesV1.js +1 -0
- package/dist/src/evaluation/upstreamArtifacts/orchestratorContextReadinessResultV1.js +247 -0
- package/dist/src/evaluation/upstreamArtifacts/orchestratorWorkflowInstructionPacketV1.js +1 -0
- package/dist/src/evaluation/upstreamArtifacts/readImplementationContextPacketV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/readImplementationContextRetrievalReportV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/readJsonArtifact.js +53 -0
- package/dist/src/evaluation/upstreamArtifacts/readMyDevKitContextCapsuleV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/readMyDevKitRetrievalAuditRecordV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/readOrchestratorWorkflowInstructionPacketV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/readSupplementalContextTextFile.js +29 -0
- package/dist/src/evaluation/upstreamArtifacts/readTestContextPacketV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/readTestContextRetrievalReportV1.js +9 -0
- package/dist/src/evaluation/upstreamArtifacts/runtimeValidation.js +131 -0
- package/dist/src/evaluation/upstreamArtifacts/schemaVersion.js +32 -0
- package/dist/src/evaluation/upstreamArtifacts/supplementalContextTextParser.js +75 -0
- package/dist/src/evaluation/upstreamArtifacts/supplementalContextTypes.js +152 -0
- package/dist/src/evaluation/upstreamArtifacts/validateMyDevKitContextCapsuleV1.js +1208 -0
- package/dist/src/evaluation/upstreamArtifacts/validateMyDevKitRetrievalAuditRecordV1.js +112 -0
- package/dist/src/evaluation/upstreamArtifacts/validateOrchestratorWorkflowInstructionPacketV1.js +235 -0
- package/dist/src/evaluation/upstreamArtifacts/validateSupplementalContextDocumentV1.js +148 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/executeV043StageContextStrategy.js +46 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/index.js +9 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/loadV043StrategyArtifacts.js +397 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/plugin.js +39 -1
- package/dist/src/experiments/plugins/contextStrategyComparison/readV043FullWorkflowLibraryFixture.js +162 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/resolveV043StrategyInputs.js +43 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/resultMapping.js +3 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/runV043StageContextStrategyWithAssurance.js +205 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/v043FullWorkflowLibraryFixture.js +1 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/v043RunAssuranceTypes.js +1 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/v043StrategyExecutionTypes.js +1 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/v043StrategyIds.js +13 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/v043StrategyInputContracts.js +1 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/validateV043RunAssuranceConfig.js +59 -0
- package/dist/src/experiments/plugins/contextStrategyComparison/validateV043StrategyInput.js +266 -0
- package/dist/src/report/experiments/buildContextStrategyComparisonV043Report.js +520 -0
- package/dist/src/report/experiments/buildPluginExperimentReport.js +21 -6
- package/dist/src/report/experiments/contextStrategyComparisonV043ReportModel.js +1 -0
- package/dist/src/report/experiments/index.js +4 -0
- package/dist/src/report/experiments/renderContextStrategyComparisonV043Html.js +296 -0
- package/dist/src/report/experiments/renderPluginExperimentReportHtml.js +3 -0
- package/dist/src/report/experiments/renderPluginExperimentReportText.js +292 -0
- package/dist/src/report/experiments/writePluginExperimentReports.js +3 -0
- package/dist/src/securityValidation/attackScenarios/scenarios/secretLeakageScenario.js +215 -9
- package/docs/METRICS.md +84 -10
- package/package.json +2 -2
- package/tests/fixtures/full-workflow-library/complete-v1.0.0.json +24 -0
- package/tests/fixtures/full-workflow-library/future-minor-v1.1.0-additive.json +25 -0
- package/tests/fixtures/stage-context-expectations/complete-v1.0.0.json +230 -0
- package/tests/fixtures/stage-context-expectations/future-minor-v1.1.0-additive.json +232 -0
- package/tests/fixtures/stage-context-expectations/invalid/malformed-json.txt +1 -0
- package/tests/fixtures/stage-context-expectations/invalid/non-object-root.json +1 -0
- package/tests/fixtures/stage-context-expectations/minimal-v1.0.0.json +18 -0
- package/tests/fixtures/upstream-artifacts/invalid/malformed-json.txt +1 -0
- package/tests/fixtures/upstream-artifacts/invalid/non-object-root.json +1 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/context-capsule/complete-v1.0.0.json +504 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/context-capsule/future-minor-v1.1.0-additive.json +955 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/retrieval-audit-record/complete-v1.0.0.json +190 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit/1.10.2/retrieval-audit-record/future-minor-v1.1.0-additive.json +327 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-1.10.2-identity/PROVENANCE.txt +13 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-1.10.2-identity/context-capsule.json +7874 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-1.10.2-identity/retrieval-audit-record.json +1076 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.1/workflow-instruction-packet/complete-v1.0.0.json +160 -0
- package/tests/fixtures/upstream-artifacts/my-dev-kit-orchestrator/1.2.1/workflow-instruction-packet/future-minor-v1.1.0-additive.json +186 -0
|
@@ -0,0 +1,1208 @@
|
|
|
1
|
+
import { parseSupportedMajorOneSchemaVersion } from "./schemaVersion.js";
|
|
2
|
+
import { ArtifactValidationError, arrayFieldPath, joinFieldPath, optionalBoolean, optionalField, optionalLiteral, optionalNullableString, optionalNumber, optionalString, requiredArray, requiredBoolean, requiredField, requiredLiteral, requiredNonnegativeInteger, requiredNullableLiteral, requiredNullableNumber, requiredNullableString, requiredNumber, requiredObject, requiredRecord, requiredScalarLike, requiredScalarOrStringArrayLike, requiredString, requiredStringArray } from "./runtimeValidation.js";
|
|
3
|
+
const ARTIFACT_KIND = "my-dev-kit-context-capsule-v1";
|
|
4
|
+
const CONTEXT_CAPSULE_MODES = ["general", "feature-add", "subsystem"];
|
|
5
|
+
const CONTEXT_ROLES = ["architecture", "implementation", "test-implementation"];
|
|
6
|
+
const CONTEXT_ENTRY_KINDS = [
|
|
7
|
+
"request-summary",
|
|
8
|
+
"index-summary",
|
|
9
|
+
"artifact-summary",
|
|
10
|
+
"placeholder",
|
|
11
|
+
"focus-summary",
|
|
12
|
+
"selected-graph-summary",
|
|
13
|
+
"selected-source-summary",
|
|
14
|
+
"semantic-summary",
|
|
15
|
+
"classification-summary",
|
|
16
|
+
"conflict-summary"
|
|
17
|
+
];
|
|
18
|
+
const CONTEXT_ADEQUACY_STATUSES = [
|
|
19
|
+
"context sufficient for implementation",
|
|
20
|
+
"context sufficient with listed assumptions",
|
|
21
|
+
"context insufficient and more retrieval required",
|
|
22
|
+
"context conflict found and user or upstream stage decision required"
|
|
23
|
+
];
|
|
24
|
+
const CHANGED_SURFACE_STATUSES = ["added", "modified", "removed", "unknown"];
|
|
25
|
+
const CHANGED_SURFACE_PROVENANCES = ["caller", "graph-diff", "both"];
|
|
26
|
+
const FOCUS_SELECTION_MODES = ["none", "single-best", "best-effort-ambiguous"];
|
|
27
|
+
const FOCUS_CONFIDENCES = ["high", "medium", "low", "none"];
|
|
28
|
+
const SOURCE_RETRIEVAL_METHODS = [
|
|
29
|
+
"node",
|
|
30
|
+
"symbol",
|
|
31
|
+
"line-range",
|
|
32
|
+
"contains",
|
|
33
|
+
"react-region",
|
|
34
|
+
"local-component-tree",
|
|
35
|
+
"local-dependency-expansion",
|
|
36
|
+
"continuation"
|
|
37
|
+
];
|
|
38
|
+
const SOURCE_INCLUDED_BY = ["primary-focus", "selected-graph"];
|
|
39
|
+
const REQUESTED_EVIDENCE_KINDS = [
|
|
40
|
+
"owner",
|
|
41
|
+
"dependencies",
|
|
42
|
+
"contracts",
|
|
43
|
+
"validators",
|
|
44
|
+
"constants",
|
|
45
|
+
"errors",
|
|
46
|
+
"schemas",
|
|
47
|
+
"callers",
|
|
48
|
+
"callees",
|
|
49
|
+
"closest-tests",
|
|
50
|
+
"test-infrastructure",
|
|
51
|
+
"test-commands",
|
|
52
|
+
"changed-surface",
|
|
53
|
+
"responsibility-mappings"
|
|
54
|
+
];
|
|
55
|
+
const EVIDENCE_GROUP_KINDS = [
|
|
56
|
+
"owners",
|
|
57
|
+
"extension-points",
|
|
58
|
+
"contracts",
|
|
59
|
+
"graph-neighborhood",
|
|
60
|
+
"architecture-tests",
|
|
61
|
+
"dependencies",
|
|
62
|
+
"callers-and-callees",
|
|
63
|
+
"validators-and-constants",
|
|
64
|
+
"errors",
|
|
65
|
+
"schemas-and-serializers",
|
|
66
|
+
"compatibility-surfaces",
|
|
67
|
+
"closest-tests",
|
|
68
|
+
"changed-surface",
|
|
69
|
+
"production-symbols",
|
|
70
|
+
"validators-and-boundaries",
|
|
71
|
+
"errors-and-side-effects",
|
|
72
|
+
"related-tests",
|
|
73
|
+
"fixtures",
|
|
74
|
+
"factories",
|
|
75
|
+
"mocks",
|
|
76
|
+
"setup-and-configuration",
|
|
77
|
+
"test-commands",
|
|
78
|
+
"unresolved-evidence"
|
|
79
|
+
];
|
|
80
|
+
const EVIDENCE_ITEM_KINDS = [
|
|
81
|
+
"file",
|
|
82
|
+
"symbol",
|
|
83
|
+
"test-file",
|
|
84
|
+
"fixture",
|
|
85
|
+
"factory",
|
|
86
|
+
"mock",
|
|
87
|
+
"setup-file",
|
|
88
|
+
"config-file",
|
|
89
|
+
"package-script",
|
|
90
|
+
"command"
|
|
91
|
+
];
|
|
92
|
+
const TEST_COMMAND_SCOPES = ["file", "directory", "suite", "full-project"];
|
|
93
|
+
const RESPONSIBILITY_CRITICALITIES = ["critical", "noncritical"];
|
|
94
|
+
const RESPONSIBILITY_MAPPING_STATUSES = ["mapped", "partially-mapped", "unmapped", "not-applicable"];
|
|
95
|
+
const FRESHNESS_STATES = ["fresh", "stale", "unknown"];
|
|
96
|
+
const PROVENANCE_CATEGORIES = [
|
|
97
|
+
"request",
|
|
98
|
+
"cli",
|
|
99
|
+
"request-file",
|
|
100
|
+
"focus-file",
|
|
101
|
+
"focus-symbol",
|
|
102
|
+
"caller-changed-file",
|
|
103
|
+
"caller-changed-symbol",
|
|
104
|
+
"graph-diff",
|
|
105
|
+
"active-index",
|
|
106
|
+
"before-index",
|
|
107
|
+
"after-index",
|
|
108
|
+
"code-graph",
|
|
109
|
+
"symbol-index",
|
|
110
|
+
"source-scan",
|
|
111
|
+
"test-directory-walk",
|
|
112
|
+
"import-scan",
|
|
113
|
+
"package-json",
|
|
114
|
+
"test-configuration",
|
|
115
|
+
"upstream-artifact-ref"
|
|
116
|
+
];
|
|
117
|
+
const EDIT_GUIDANCES = [
|
|
118
|
+
"safe-primary-edit-target",
|
|
119
|
+
"inspect-before-edit",
|
|
120
|
+
"avoid-primary-edit-target",
|
|
121
|
+
"read-only-reference",
|
|
122
|
+
"generated-do-not-edit",
|
|
123
|
+
"test-only",
|
|
124
|
+
"docs-only",
|
|
125
|
+
"uncertain"
|
|
126
|
+
];
|
|
127
|
+
const READINESSES = ["ready", "needs-more-context", "risky-assumption"];
|
|
128
|
+
const RISK_LABELS = [
|
|
129
|
+
"wrong-layer-risk",
|
|
130
|
+
"unreachable-ui-risk",
|
|
131
|
+
"requires-test-validation",
|
|
132
|
+
"requires-browser-validation",
|
|
133
|
+
"generated-file-risk",
|
|
134
|
+
"public-contract-risk",
|
|
135
|
+
"migration-risk"
|
|
136
|
+
];
|
|
137
|
+
const UNCERTAINTY_TIERS = ["certain", "likely", "possible", "unknown"];
|
|
138
|
+
function validateContextRole(ctx, value, fieldPath) {
|
|
139
|
+
return requiredNullableLiteral(ctx, value, fieldPath, CONTEXT_ROLES);
|
|
140
|
+
}
|
|
141
|
+
function validateSemanticArtifactRef(ctx, value, fieldPath) {
|
|
142
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
143
|
+
return {
|
|
144
|
+
artifact: requiredString(ctx, requiredField(ctx, obj, "artifact", joinFieldPath(fieldPath, "artifact")), joinFieldPath(fieldPath, "artifact")),
|
|
145
|
+
...(optionalField(obj, "artifactKind") !== undefined
|
|
146
|
+
? { artifactKind: optionalNullableString(ctx, optionalField(obj, "artifactKind"), joinFieldPath(fieldPath, "artifactKind")) }
|
|
147
|
+
: {}),
|
|
148
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
149
|
+
...(optionalField(obj, "path") !== undefined
|
|
150
|
+
? { path: optionalNullableString(ctx, optionalField(obj, "path"), joinFieldPath(fieldPath, "path")) }
|
|
151
|
+
: {})
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
function validateSemanticEvidenceRef(ctx, value, fieldPath) {
|
|
155
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
156
|
+
const result = {
|
|
157
|
+
filePath: requiredString(ctx, requiredField(ctx, obj, "filePath", joinFieldPath(fieldPath, "filePath")), joinFieldPath(fieldPath, "filePath"))
|
|
158
|
+
};
|
|
159
|
+
if (optionalField(obj, "symbolId") !== undefined)
|
|
160
|
+
result.symbolId = optionalNullableString(ctx, obj.symbolId, joinFieldPath(fieldPath, "symbolId"));
|
|
161
|
+
if (optionalField(obj, "line") !== undefined)
|
|
162
|
+
result.line = obj.line === null ? null : requiredNumber(ctx, obj.line, joinFieldPath(fieldPath, "line"));
|
|
163
|
+
if (optionalField(obj, "endLine") !== undefined)
|
|
164
|
+
result.endLine = obj.endLine === null ? null : requiredNumber(ctx, obj.endLine, joinFieldPath(fieldPath, "endLine"));
|
|
165
|
+
if (optionalField(obj, "source") !== undefined)
|
|
166
|
+
result.source = optionalNullableString(ctx, obj.source, joinFieldPath(fieldPath, "source"));
|
|
167
|
+
if (optionalField(obj, "analyzer") !== undefined)
|
|
168
|
+
result.analyzer = optionalNullableString(ctx, obj.analyzer, joinFieldPath(fieldPath, "analyzer"));
|
|
169
|
+
return result;
|
|
170
|
+
}
|
|
171
|
+
function validateSemanticRoleWarning(ctx, value, fieldPath) {
|
|
172
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
173
|
+
const result = {
|
|
174
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
175
|
+
message: requiredString(ctx, requiredField(ctx, obj, "message", joinFieldPath(fieldPath, "message")), joinFieldPath(fieldPath, "message"))
|
|
176
|
+
};
|
|
177
|
+
if (optionalField(obj, "artifactRefs") !== undefined) {
|
|
178
|
+
result.artifactRefs = requiredArray(ctx, obj.artifactRefs, joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i)));
|
|
179
|
+
}
|
|
180
|
+
if (optionalField(obj, "evidenceRefs") !== undefined) {
|
|
181
|
+
result.evidenceRefs = requiredArray(ctx, obj.evidenceRefs, joinFieldPath(fieldPath, "evidenceRefs")).map((item, i) => validateSemanticEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "evidenceRefs"), i)));
|
|
182
|
+
}
|
|
183
|
+
return result;
|
|
184
|
+
}
|
|
185
|
+
function validateSemanticRole(ctx, value, fieldPath) {
|
|
186
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
187
|
+
const result = {
|
|
188
|
+
role: requiredString(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
189
|
+
confidence: requiredString(ctx, requiredField(ctx, obj, "confidence", joinFieldPath(fieldPath, "confidence")), joinFieldPath(fieldPath, "confidence")),
|
|
190
|
+
source: requiredString(ctx, requiredField(ctx, obj, "source", joinFieldPath(fieldPath, "source")), joinFieldPath(fieldPath, "source"))
|
|
191
|
+
};
|
|
192
|
+
if (optionalField(obj, "subtype") !== undefined)
|
|
193
|
+
result.subtype = optionalNullableString(ctx, obj.subtype, joinFieldPath(fieldPath, "subtype"));
|
|
194
|
+
if (optionalField(obj, "artifactRefs") !== undefined) {
|
|
195
|
+
result.artifactRefs = requiredArray(ctx, obj.artifactRefs, joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i)));
|
|
196
|
+
}
|
|
197
|
+
if (optionalField(obj, "evidenceRefs") !== undefined) {
|
|
198
|
+
result.evidenceRefs = requiredArray(ctx, obj.evidenceRefs, joinFieldPath(fieldPath, "evidenceRefs")).map((item, i) => validateSemanticEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "evidenceRefs"), i)));
|
|
199
|
+
}
|
|
200
|
+
if (optionalField(obj, "warnings") !== undefined) {
|
|
201
|
+
result.warnings = requiredArray(ctx, obj.warnings, joinFieldPath(fieldPath, "warnings")).map((item, i) => validateSemanticRoleWarning(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "warnings"), i)));
|
|
202
|
+
}
|
|
203
|
+
return result;
|
|
204
|
+
}
|
|
205
|
+
function validateClassificationRole(ctx, value, fieldPath) {
|
|
206
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
207
|
+
const result = {
|
|
208
|
+
role: requiredString(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
209
|
+
confidence: requiredLiteral(ctx, requiredField(ctx, obj, "confidence", joinFieldPath(fieldPath, "confidence")), joinFieldPath(fieldPath, "confidence"), UNCERTAINTY_TIERS)
|
|
210
|
+
};
|
|
211
|
+
if (optionalField(obj, "subtype") !== undefined)
|
|
212
|
+
result.subtype = optionalNullableString(ctx, obj.subtype, joinFieldPath(fieldPath, "subtype"));
|
|
213
|
+
return result;
|
|
214
|
+
}
|
|
215
|
+
function validateClassificationRoleRef(ctx, value, fieldPath) {
|
|
216
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
217
|
+
return {
|
|
218
|
+
role: requiredString(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
219
|
+
editGuidance: requiredLiteral(ctx, requiredField(ctx, obj, "editGuidance", joinFieldPath(fieldPath, "editGuidance")), joinFieldPath(fieldPath, "editGuidance"), EDIT_GUIDANCES),
|
|
220
|
+
readiness: requiredLiteral(ctx, requiredField(ctx, obj, "readiness", joinFieldPath(fieldPath, "readiness")), joinFieldPath(fieldPath, "readiness"), READINESSES),
|
|
221
|
+
uncertainty: requiredLiteral(ctx, requiredField(ctx, obj, "uncertainty", joinFieldPath(fieldPath, "uncertainty")), joinFieldPath(fieldPath, "uncertainty"), UNCERTAINTY_TIERS)
|
|
222
|
+
};
|
|
223
|
+
}
|
|
224
|
+
function validateContextEntryEvidenceRef(ctx, value, fieldPath) {
|
|
225
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
226
|
+
return { path: requiredString(ctx, requiredField(ctx, obj, "path", joinFieldPath(fieldPath, "path")), joinFieldPath(fieldPath, "path")) };
|
|
227
|
+
}
|
|
228
|
+
function validateContextEntry(ctx, value, fieldPath) {
|
|
229
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
230
|
+
const result = {
|
|
231
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
232
|
+
kind: requiredLiteral(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind"), CONTEXT_ENTRY_KINDS),
|
|
233
|
+
title: requiredString(ctx, requiredField(ctx, obj, "title", joinFieldPath(fieldPath, "title")), joinFieldPath(fieldPath, "title")),
|
|
234
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
235
|
+
evidenceRefs: requiredArray(ctx, requiredField(ctx, obj, "evidenceRefs", joinFieldPath(fieldPath, "evidenceRefs")), joinFieldPath(fieldPath, "evidenceRefs")).map((item, i) => validateContextEntryEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "evidenceRefs"), i))),
|
|
236
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
237
|
+
};
|
|
238
|
+
if (optionalField(obj, "classificationRefs") !== undefined) {
|
|
239
|
+
result.classificationRefs = requiredArray(ctx, obj.classificationRefs, joinFieldPath(fieldPath, "classificationRefs")).map((item, i) => validateSemanticEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRefs"), i)));
|
|
240
|
+
}
|
|
241
|
+
if (optionalField(obj, "classificationRoles") !== undefined) {
|
|
242
|
+
result.classificationRoles = requiredArray(ctx, obj.classificationRoles, joinFieldPath(fieldPath, "classificationRoles")).map((item, i) => validateClassificationRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRoles"), i)));
|
|
243
|
+
}
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
function validateDroppedContextEntry(ctx, value, fieldPath) {
|
|
247
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
248
|
+
return {
|
|
249
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
250
|
+
kind: requiredLiteral(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind"), CONTEXT_ENTRY_KINDS),
|
|
251
|
+
title: requiredString(ctx, requiredField(ctx, obj, "title", joinFieldPath(fieldPath, "title")), joinFieldPath(fieldPath, "title")),
|
|
252
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason"))
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
export function validateContextAdequacyStatement(ctx, value, fieldPath) {
|
|
256
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
257
|
+
return {
|
|
258
|
+
status: requiredLiteral(ctx, requiredField(ctx, obj, "status", joinFieldPath(fieldPath, "status")), joinFieldPath(fieldPath, "status"), CONTEXT_ADEQUACY_STATUSES),
|
|
259
|
+
summary: requiredString(ctx, requiredField(ctx, obj, "summary", joinFieldPath(fieldPath, "summary")), joinFieldPath(fieldPath, "summary")),
|
|
260
|
+
assumptions: requiredStringArray(ctx, requiredField(ctx, obj, "assumptions", joinFieldPath(fieldPath, "assumptions")), joinFieldPath(fieldPath, "assumptions")),
|
|
261
|
+
gaps: requiredStringArray(ctx, requiredField(ctx, obj, "gaps", joinFieldPath(fieldPath, "gaps")), joinFieldPath(fieldPath, "gaps"))
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
function validateQueryTerms(ctx, value, fieldPath) {
|
|
265
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
266
|
+
const req = (key) => requiredStringArray(ctx, requiredField(ctx, obj, key, joinFieldPath(fieldPath, key)), joinFieldPath(fieldPath, key));
|
|
267
|
+
return {
|
|
268
|
+
raw: req("raw"),
|
|
269
|
+
quotedPhrases: req("quotedPhrases"),
|
|
270
|
+
pathLike: req("pathLike"),
|
|
271
|
+
symbolLike: req("symbolLike"),
|
|
272
|
+
routeLike: req("routeLike"),
|
|
273
|
+
commandLike: req("commandLike"),
|
|
274
|
+
artifactLike: req("artifactLike"),
|
|
275
|
+
classificationLike: req("classificationLike")
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
function validateQueryPlan(ctx, value, fieldPath) {
|
|
279
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
280
|
+
return {
|
|
281
|
+
originalQuery: requiredString(ctx, requiredField(ctx, obj, "originalQuery", joinFieldPath(fieldPath, "originalQuery")), joinFieldPath(fieldPath, "originalQuery")),
|
|
282
|
+
normalizedQuery: requiredString(ctx, requiredField(ctx, obj, "normalizedQuery", joinFieldPath(fieldPath, "normalizedQuery")), joinFieldPath(fieldPath, "normalizedQuery")),
|
|
283
|
+
mode: requiredLiteral(ctx, requiredField(ctx, obj, "mode", joinFieldPath(fieldPath, "mode")), joinFieldPath(fieldPath, "mode"), CONTEXT_CAPSULE_MODES),
|
|
284
|
+
searchQueries: requiredStringArray(ctx, requiredField(ctx, obj, "searchQueries", joinFieldPath(fieldPath, "searchQueries")), joinFieldPath(fieldPath, "searchQueries")),
|
|
285
|
+
terms: validateQueryTerms(ctx, requiredField(ctx, obj, "terms", joinFieldPath(fieldPath, "terms")), joinFieldPath(fieldPath, "terms"))
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
function validateCandidateFile(ctx, value, fieldPath) {
|
|
289
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
290
|
+
const result = {
|
|
291
|
+
path: requiredString(ctx, requiredField(ctx, obj, "path", joinFieldPath(fieldPath, "path")), joinFieldPath(fieldPath, "path")),
|
|
292
|
+
score: requiredNumber(ctx, requiredField(ctx, obj, "score", joinFieldPath(fieldPath, "score")), joinFieldPath(fieldPath, "score")),
|
|
293
|
+
reasons: requiredStringArray(ctx, requiredField(ctx, obj, "reasons", joinFieldPath(fieldPath, "reasons")), joinFieldPath(fieldPath, "reasons")),
|
|
294
|
+
matchedTerms: requiredStringArray(ctx, requiredField(ctx, obj, "matchedTerms", joinFieldPath(fieldPath, "matchedTerms")), joinFieldPath(fieldPath, "matchedTerms")),
|
|
295
|
+
retained: requiredBoolean(ctx, requiredField(ctx, obj, "retained", joinFieldPath(fieldPath, "retained")), joinFieldPath(fieldPath, "retained"))
|
|
296
|
+
};
|
|
297
|
+
if (optionalField(obj, "baseScore") !== undefined)
|
|
298
|
+
result.baseScore = optionalNumber(ctx, obj.baseScore, joinFieldPath(fieldPath, "baseScore"));
|
|
299
|
+
if (optionalField(obj, "modeAdjustment") !== undefined)
|
|
300
|
+
result.modeAdjustment = optionalNumber(ctx, obj.modeAdjustment, joinFieldPath(fieldPath, "modeAdjustment"));
|
|
301
|
+
if (optionalField(obj, "semanticRoles") !== undefined) {
|
|
302
|
+
result.semanticRoles = requiredArray(ctx, obj.semanticRoles, joinFieldPath(fieldPath, "semanticRoles")).map((item, i) => validateSemanticRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "semanticRoles"), i)));
|
|
303
|
+
}
|
|
304
|
+
if (optionalField(obj, "artifactRefs") !== undefined) {
|
|
305
|
+
result.artifactRefs = requiredArray(ctx, obj.artifactRefs, joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i)));
|
|
306
|
+
}
|
|
307
|
+
if (optionalField(obj, "classificationRoles") !== undefined) {
|
|
308
|
+
result.classificationRoles = requiredArray(ctx, obj.classificationRoles, joinFieldPath(fieldPath, "classificationRoles")).map((item, i) => validateClassificationRoleRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRoles"), i)));
|
|
309
|
+
}
|
|
310
|
+
if (optionalField(obj, "classificationRefs") !== undefined) {
|
|
311
|
+
result.classificationRefs = requiredArray(ctx, obj.classificationRefs, joinFieldPath(fieldPath, "classificationRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRefs"), i)));
|
|
312
|
+
}
|
|
313
|
+
if (optionalField(obj, "droppedReason") !== undefined)
|
|
314
|
+
result.droppedReason = optionalString(ctx, obj.droppedReason, joinFieldPath(fieldPath, "droppedReason"));
|
|
315
|
+
if (optionalField(obj, "roleScoreAdjustment") !== undefined)
|
|
316
|
+
result.roleScoreAdjustment = optionalNumber(ctx, obj.roleScoreAdjustment, joinFieldPath(fieldPath, "roleScoreAdjustment"));
|
|
317
|
+
if (optionalField(obj, "contextRole") !== undefined)
|
|
318
|
+
result.contextRole = optionalLiteral(ctx, obj.contextRole, joinFieldPath(fieldPath, "contextRole"), CONTEXT_ROLES);
|
|
319
|
+
if (optionalField(obj, "focusMatch") !== undefined)
|
|
320
|
+
result.focusMatch = optionalBoolean(ctx, obj.focusMatch, joinFieldPath(fieldPath, "focusMatch"));
|
|
321
|
+
if (optionalField(obj, "changedSurfaceMatch") !== undefined)
|
|
322
|
+
result.changedSurfaceMatch = optionalBoolean(ctx, obj.changedSurfaceMatch, joinFieldPath(fieldPath, "changedSurfaceMatch"));
|
|
323
|
+
if (optionalField(obj, "changedStatus") !== undefined)
|
|
324
|
+
result.changedStatus = optionalLiteral(ctx, obj.changedStatus, joinFieldPath(fieldPath, "changedStatus"), CHANGED_SURFACE_STATUSES);
|
|
325
|
+
return result;
|
|
326
|
+
}
|
|
327
|
+
function validateCandidateNode(ctx, value, fieldPath) {
|
|
328
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
329
|
+
const result = {
|
|
330
|
+
nodeId: requiredString(ctx, requiredField(ctx, obj, "nodeId", joinFieldPath(fieldPath, "nodeId")), joinFieldPath(fieldPath, "nodeId")),
|
|
331
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
332
|
+
label: requiredString(ctx, requiredField(ctx, obj, "label", joinFieldPath(fieldPath, "label")), joinFieldPath(fieldPath, "label")),
|
|
333
|
+
score: requiredNumber(ctx, requiredField(ctx, obj, "score", joinFieldPath(fieldPath, "score")), joinFieldPath(fieldPath, "score")),
|
|
334
|
+
reasons: requiredStringArray(ctx, requiredField(ctx, obj, "reasons", joinFieldPath(fieldPath, "reasons")), joinFieldPath(fieldPath, "reasons")),
|
|
335
|
+
matchedTerms: requiredStringArray(ctx, requiredField(ctx, obj, "matchedTerms", joinFieldPath(fieldPath, "matchedTerms")), joinFieldPath(fieldPath, "matchedTerms")),
|
|
336
|
+
retained: requiredBoolean(ctx, requiredField(ctx, obj, "retained", joinFieldPath(fieldPath, "retained")), joinFieldPath(fieldPath, "retained"))
|
|
337
|
+
};
|
|
338
|
+
if (optionalField(obj, "filePath") !== undefined)
|
|
339
|
+
result.filePath = optionalString(ctx, obj.filePath, joinFieldPath(fieldPath, "filePath"));
|
|
340
|
+
if (optionalField(obj, "baseScore") !== undefined)
|
|
341
|
+
result.baseScore = optionalNumber(ctx, obj.baseScore, joinFieldPath(fieldPath, "baseScore"));
|
|
342
|
+
if (optionalField(obj, "modeAdjustment") !== undefined)
|
|
343
|
+
result.modeAdjustment = optionalNumber(ctx, obj.modeAdjustment, joinFieldPath(fieldPath, "modeAdjustment"));
|
|
344
|
+
if (optionalField(obj, "semanticRoles") !== undefined) {
|
|
345
|
+
result.semanticRoles = requiredArray(ctx, obj.semanticRoles, joinFieldPath(fieldPath, "semanticRoles")).map((item, i) => validateSemanticRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "semanticRoles"), i)));
|
|
346
|
+
}
|
|
347
|
+
if (optionalField(obj, "artifactRefs") !== undefined) {
|
|
348
|
+
result.artifactRefs = requiredArray(ctx, obj.artifactRefs, joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i)));
|
|
349
|
+
}
|
|
350
|
+
if (optionalField(obj, "classificationRoles") !== undefined) {
|
|
351
|
+
result.classificationRoles = requiredArray(ctx, obj.classificationRoles, joinFieldPath(fieldPath, "classificationRoles")).map((item, i) => validateClassificationRoleRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRoles"), i)));
|
|
352
|
+
}
|
|
353
|
+
if (optionalField(obj, "classificationRefs") !== undefined) {
|
|
354
|
+
result.classificationRefs = requiredArray(ctx, obj.classificationRefs, joinFieldPath(fieldPath, "classificationRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRefs"), i)));
|
|
355
|
+
}
|
|
356
|
+
if (optionalField(obj, "androidArtifactId") !== undefined)
|
|
357
|
+
result.androidArtifactId = optionalString(ctx, obj.androidArtifactId, joinFieldPath(fieldPath, "androidArtifactId"));
|
|
358
|
+
if (optionalField(obj, "androidMetadata") !== undefined) {
|
|
359
|
+
const recordObj = requiredRecord(ctx, obj.androidMetadata, joinFieldPath(fieldPath, "androidMetadata"));
|
|
360
|
+
const record = {};
|
|
361
|
+
for (const [key, val] of Object.entries(recordObj)) {
|
|
362
|
+
record[key] = requiredScalarLike(ctx, val, joinFieldPath(joinFieldPath(fieldPath, "androidMetadata"), key));
|
|
363
|
+
}
|
|
364
|
+
result.androidMetadata = record;
|
|
365
|
+
}
|
|
366
|
+
if (optionalField(obj, "droppedReason") !== undefined)
|
|
367
|
+
result.droppedReason = optionalString(ctx, obj.droppedReason, joinFieldPath(fieldPath, "droppedReason"));
|
|
368
|
+
if (optionalField(obj, "roleScoreAdjustment") !== undefined)
|
|
369
|
+
result.roleScoreAdjustment = optionalNumber(ctx, obj.roleScoreAdjustment, joinFieldPath(fieldPath, "roleScoreAdjustment"));
|
|
370
|
+
if (optionalField(obj, "contextRole") !== undefined)
|
|
371
|
+
result.contextRole = optionalLiteral(ctx, obj.contextRole, joinFieldPath(fieldPath, "contextRole"), CONTEXT_ROLES);
|
|
372
|
+
if (optionalField(obj, "focusMatch") !== undefined)
|
|
373
|
+
result.focusMatch = optionalBoolean(ctx, obj.focusMatch, joinFieldPath(fieldPath, "focusMatch"));
|
|
374
|
+
if (optionalField(obj, "changedSurfaceMatch") !== undefined)
|
|
375
|
+
result.changedSurfaceMatch = optionalBoolean(ctx, obj.changedSurfaceMatch, joinFieldPath(fieldPath, "changedSurfaceMatch"));
|
|
376
|
+
if (optionalField(obj, "changedStatus") !== undefined)
|
|
377
|
+
result.changedStatus = optionalLiteral(ctx, obj.changedStatus, joinFieldPath(fieldPath, "changedStatus"), CHANGED_SURFACE_STATUSES);
|
|
378
|
+
if (optionalField(obj, "synthesized") !== undefined)
|
|
379
|
+
result.synthesized = optionalBoolean(ctx, obj.synthesized, joinFieldPath(fieldPath, "synthesized"));
|
|
380
|
+
return result;
|
|
381
|
+
}
|
|
382
|
+
function validateContextFocus(ctx, value, fieldPath) {
|
|
383
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
384
|
+
return {
|
|
385
|
+
focusNodeId: requiredNullableString(ctx, requiredField(ctx, obj, "focusNodeId", joinFieldPath(fieldPath, "focusNodeId")), joinFieldPath(fieldPath, "focusNodeId")),
|
|
386
|
+
focusFilePath: requiredNullableString(ctx, requiredField(ctx, obj, "focusFilePath", joinFieldPath(fieldPath, "focusFilePath")), joinFieldPath(fieldPath, "focusFilePath")),
|
|
387
|
+
selectionMode: requiredLiteral(ctx, requiredField(ctx, obj, "selectionMode", joinFieldPath(fieldPath, "selectionMode")), joinFieldPath(fieldPath, "selectionMode"), FOCUS_SELECTION_MODES),
|
|
388
|
+
confidence: requiredLiteral(ctx, requiredField(ctx, obj, "confidence", joinFieldPath(fieldPath, "confidence")), joinFieldPath(fieldPath, "confidence"), FOCUS_CONFIDENCES),
|
|
389
|
+
reasons: requiredStringArray(ctx, requiredField(ctx, obj, "reasons", joinFieldPath(fieldPath, "reasons")), joinFieldPath(fieldPath, "reasons")),
|
|
390
|
+
ambiguityNotes: requiredStringArray(ctx, requiredField(ctx, obj, "ambiguityNotes", joinFieldPath(fieldPath, "ambiguityNotes")), joinFieldPath(fieldPath, "ambiguityNotes")),
|
|
391
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
function validateSelectedGraphNode(ctx, value, fieldPath) {
|
|
395
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
396
|
+
const result = {
|
|
397
|
+
nodeId: requiredString(ctx, requiredField(ctx, obj, "nodeId", joinFieldPath(fieldPath, "nodeId")), joinFieldPath(fieldPath, "nodeId")),
|
|
398
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
399
|
+
label: requiredString(ctx, requiredField(ctx, obj, "label", joinFieldPath(fieldPath, "label")), joinFieldPath(fieldPath, "label")),
|
|
400
|
+
reasons: requiredStringArray(ctx, requiredField(ctx, obj, "reasons", joinFieldPath(fieldPath, "reasons")), joinFieldPath(fieldPath, "reasons"))
|
|
401
|
+
};
|
|
402
|
+
if (optionalField(obj, "filePath") !== undefined)
|
|
403
|
+
result.filePath = optionalString(ctx, obj.filePath, joinFieldPath(fieldPath, "filePath"));
|
|
404
|
+
return result;
|
|
405
|
+
}
|
|
406
|
+
function validateSelectedGraphEdge(ctx, value, fieldPath) {
|
|
407
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
408
|
+
return {
|
|
409
|
+
from: requiredString(ctx, requiredField(ctx, obj, "from", joinFieldPath(fieldPath, "from")), joinFieldPath(fieldPath, "from")),
|
|
410
|
+
to: requiredString(ctx, requiredField(ctx, obj, "to", joinFieldPath(fieldPath, "to")), joinFieldPath(fieldPath, "to")),
|
|
411
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
412
|
+
reasons: requiredStringArray(ctx, requiredField(ctx, obj, "reasons", joinFieldPath(fieldPath, "reasons")), joinFieldPath(fieldPath, "reasons"))
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
function validateSelectedGraph(ctx, value, fieldPath) {
|
|
416
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
417
|
+
return {
|
|
418
|
+
nodes: requiredArray(ctx, requiredField(ctx, obj, "nodes", joinFieldPath(fieldPath, "nodes")), joinFieldPath(fieldPath, "nodes")).map((item, i) => validateSelectedGraphNode(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "nodes"), i))),
|
|
419
|
+
edges: requiredArray(ctx, requiredField(ctx, obj, "edges", joinFieldPath(fieldPath, "edges")), joinFieldPath(fieldPath, "edges")).map((item, i) => validateSelectedGraphEdge(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "edges"), i))),
|
|
420
|
+
omittedNodeCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "omittedNodeCount", joinFieldPath(fieldPath, "omittedNodeCount")), joinFieldPath(fieldPath, "omittedNodeCount")),
|
|
421
|
+
omittedEdgeCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "omittedEdgeCount", joinFieldPath(fieldPath, "omittedEdgeCount")), joinFieldPath(fieldPath, "omittedEdgeCount")),
|
|
422
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
423
|
+
};
|
|
424
|
+
}
|
|
425
|
+
function validateRetentionCapSettings(ctx, value, fieldPath) {
|
|
426
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
427
|
+
return {
|
|
428
|
+
maxCandidateFiles: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxCandidateFiles", joinFieldPath(fieldPath, "maxCandidateFiles")), joinFieldPath(fieldPath, "maxCandidateFiles")),
|
|
429
|
+
maxGraphNodes: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxGraphNodes", joinFieldPath(fieldPath, "maxGraphNodes")), joinFieldPath(fieldPath, "maxGraphNodes")),
|
|
430
|
+
maxGraphEdges: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxGraphEdges", joinFieldPath(fieldPath, "maxGraphEdges")), joinFieldPath(fieldPath, "maxGraphEdges"))
|
|
431
|
+
};
|
|
432
|
+
}
|
|
433
|
+
function validateRetentionSummary(ctx, value, fieldPath) {
|
|
434
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
435
|
+
const reqInt = (key) => requiredNonnegativeInteger(ctx, requiredField(ctx, obj, key, joinFieldPath(fieldPath, key)), joinFieldPath(fieldPath, key));
|
|
436
|
+
return {
|
|
437
|
+
retainedCandidateCount: reqInt("retainedCandidateCount"),
|
|
438
|
+
droppedCandidateCount: reqInt("droppedCandidateCount"),
|
|
439
|
+
retainedGraphNodeCount: reqInt("retainedGraphNodeCount"),
|
|
440
|
+
droppedGraphNodeCount: reqInt("droppedGraphNodeCount"),
|
|
441
|
+
retainedGraphEdgeCount: reqInt("retainedGraphEdgeCount"),
|
|
442
|
+
droppedGraphEdgeCount: reqInt("droppedGraphEdgeCount"),
|
|
443
|
+
capSettings: validateRetentionCapSettings(ctx, requiredField(ctx, obj, "capSettings", joinFieldPath(fieldPath, "capSettings")), joinFieldPath(fieldPath, "capSettings"))
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
function validateSelectedSourceSlice(ctx, value, fieldPath) {
|
|
447
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
448
|
+
const result = {
|
|
449
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
450
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
451
|
+
filePath: requiredString(ctx, requiredField(ctx, obj, "filePath", joinFieldPath(fieldPath, "filePath")), joinFieldPath(fieldPath, "filePath")),
|
|
452
|
+
startLine: requiredNumber(ctx, requiredField(ctx, obj, "startLine", joinFieldPath(fieldPath, "startLine")), joinFieldPath(fieldPath, "startLine")),
|
|
453
|
+
endLine: requiredNumber(ctx, requiredField(ctx, obj, "endLine", joinFieldPath(fieldPath, "endLine")), joinFieldPath(fieldPath, "endLine")),
|
|
454
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
455
|
+
sourceRetrievalMethod: requiredLiteral(ctx, requiredField(ctx, obj, "sourceRetrievalMethod", joinFieldPath(fieldPath, "sourceRetrievalMethod")), joinFieldPath(fieldPath, "sourceRetrievalMethod"), SOURCE_RETRIEVAL_METHODS),
|
|
456
|
+
includedBy: requiredLiteral(ctx, requiredField(ctx, obj, "includedBy", joinFieldPath(fieldPath, "includedBy")), joinFieldPath(fieldPath, "includedBy"), SOURCE_INCLUDED_BY),
|
|
457
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
458
|
+
continuationUsed: requiredBoolean(ctx, requiredField(ctx, obj, "continuationUsed", joinFieldPath(fieldPath, "continuationUsed")), joinFieldPath(fieldPath, "continuationUsed")),
|
|
459
|
+
localExpansionUsed: requiredBoolean(ctx, requiredField(ctx, obj, "localExpansionUsed", joinFieldPath(fieldPath, "localExpansionUsed")), joinFieldPath(fieldPath, "localExpansionUsed")),
|
|
460
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
461
|
+
};
|
|
462
|
+
if (optionalField(obj, "nodeId") !== undefined)
|
|
463
|
+
result.nodeId = optionalString(ctx, obj.nodeId, joinFieldPath(fieldPath, "nodeId"));
|
|
464
|
+
if (optionalField(obj, "symbolName") !== undefined)
|
|
465
|
+
result.symbolName = optionalNullableString(ctx, obj.symbolName, joinFieldPath(fieldPath, "symbolName"));
|
|
466
|
+
if (optionalField(obj, "continuationAvailable") !== undefined)
|
|
467
|
+
result.continuationAvailable = optionalBoolean(ctx, obj.continuationAvailable, joinFieldPath(fieldPath, "continuationAvailable"));
|
|
468
|
+
if (optionalField(obj, "classificationRefs") !== undefined) {
|
|
469
|
+
result.classificationRefs = requiredArray(ctx, obj.classificationRefs, joinFieldPath(fieldPath, "classificationRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classificationRefs"), i)));
|
|
470
|
+
}
|
|
471
|
+
if (optionalField(obj, "semanticRefs") !== undefined) {
|
|
472
|
+
result.semanticRefs = requiredArray(ctx, obj.semanticRefs, joinFieldPath(fieldPath, "semanticRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "semanticRefs"), i)));
|
|
473
|
+
}
|
|
474
|
+
return result;
|
|
475
|
+
}
|
|
476
|
+
function validateSkippedSourceEntry(ctx, value, fieldPath) {
|
|
477
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
478
|
+
const result = {
|
|
479
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
480
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
481
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason"))
|
|
482
|
+
};
|
|
483
|
+
if (optionalField(obj, "filePath") !== undefined)
|
|
484
|
+
result.filePath = optionalString(ctx, obj.filePath, joinFieldPath(fieldPath, "filePath"));
|
|
485
|
+
if (optionalField(obj, "capType") !== undefined)
|
|
486
|
+
result.capType = optionalString(ctx, obj.capType, joinFieldPath(fieldPath, "capType"));
|
|
487
|
+
if (optionalField(obj, "candidateScore") !== undefined)
|
|
488
|
+
result.candidateScore = optionalNumber(ctx, obj.candidateScore, joinFieldPath(fieldPath, "candidateScore"));
|
|
489
|
+
return result;
|
|
490
|
+
}
|
|
491
|
+
function validateSelectedSource(ctx, value, fieldPath) {
|
|
492
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
493
|
+
return {
|
|
494
|
+
slices: requiredArray(ctx, requiredField(ctx, obj, "slices", joinFieldPath(fieldPath, "slices")), joinFieldPath(fieldPath, "slices")).map((item, i) => validateSelectedSourceSlice(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "slices"), i))),
|
|
495
|
+
omittedSliceCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "omittedSliceCount", joinFieldPath(fieldPath, "omittedSliceCount")), joinFieldPath(fieldPath, "omittedSliceCount")),
|
|
496
|
+
totalSelectedLines: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "totalSelectedLines", joinFieldPath(fieldPath, "totalSelectedLines")), joinFieldPath(fieldPath, "totalSelectedLines")),
|
|
497
|
+
maxSourceSlices: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "maxSourceSlices", joinFieldPath(fieldPath, "maxSourceSlices")), joinFieldPath(fieldPath, "maxSourceSlices")),
|
|
498
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings")),
|
|
499
|
+
skipped: requiredArray(ctx, requiredField(ctx, obj, "skipped", joinFieldPath(fieldPath, "skipped")), joinFieldPath(fieldPath, "skipped")).map((item, i) => validateSkippedSourceEntry(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "skipped"), i)))
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
function validateSelectedSourceBundleBlock(ctx, value, fieldPath) {
|
|
503
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
504
|
+
const result = {
|
|
505
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
506
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
507
|
+
filePath: requiredString(ctx, requiredField(ctx, obj, "filePath", joinFieldPath(fieldPath, "filePath")), joinFieldPath(fieldPath, "filePath")),
|
|
508
|
+
startLine: requiredNumber(ctx, requiredField(ctx, obj, "startLine", joinFieldPath(fieldPath, "startLine")), joinFieldPath(fieldPath, "startLine")),
|
|
509
|
+
endLine: requiredNumber(ctx, requiredField(ctx, obj, "endLine", joinFieldPath(fieldPath, "endLine")), joinFieldPath(fieldPath, "endLine")),
|
|
510
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
511
|
+
includedBy: requiredString(ctx, requiredField(ctx, obj, "includedBy", joinFieldPath(fieldPath, "includedBy")), joinFieldPath(fieldPath, "includedBy")),
|
|
512
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
513
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
514
|
+
};
|
|
515
|
+
if (optionalField(obj, "symbolName") !== undefined)
|
|
516
|
+
result.symbolName = optionalNullableString(ctx, obj.symbolName, joinFieldPath(fieldPath, "symbolName"));
|
|
517
|
+
return result;
|
|
518
|
+
}
|
|
519
|
+
function validateSelectedSourceBundleSkippedBlock(ctx, value, fieldPath) {
|
|
520
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
521
|
+
const result = {
|
|
522
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
523
|
+
kind: requiredString(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind")),
|
|
524
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason"))
|
|
525
|
+
};
|
|
526
|
+
if (optionalField(obj, "filePath") !== undefined)
|
|
527
|
+
result.filePath = optionalString(ctx, obj.filePath, joinFieldPath(fieldPath, "filePath"));
|
|
528
|
+
if (optionalField(obj, "capType") !== undefined)
|
|
529
|
+
result.capType = optionalString(ctx, obj.capType, joinFieldPath(fieldPath, "capType"));
|
|
530
|
+
if (optionalField(obj, "candidateScore") !== undefined)
|
|
531
|
+
result.candidateScore = optionalNumber(ctx, obj.candidateScore, joinFieldPath(fieldPath, "candidateScore"));
|
|
532
|
+
return result;
|
|
533
|
+
}
|
|
534
|
+
function validateSelectedSourceBundle(ctx, value, fieldPath) {
|
|
535
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
536
|
+
const result = {
|
|
537
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
538
|
+
title: requiredString(ctx, requiredField(ctx, obj, "title", joinFieldPath(fieldPath, "title")), joinFieldPath(fieldPath, "title")),
|
|
539
|
+
focusFilePath: requiredNullableString(ctx, requiredField(ctx, obj, "focusFilePath", joinFieldPath(fieldPath, "focusFilePath")), joinFieldPath(fieldPath, "focusFilePath")),
|
|
540
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
541
|
+
blocks: requiredArray(ctx, requiredField(ctx, obj, "blocks", joinFieldPath(fieldPath, "blocks")), joinFieldPath(fieldPath, "blocks")).map((item, i) => validateSelectedSourceBundleBlock(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "blocks"), i))),
|
|
542
|
+
totalLines: requiredNumber(ctx, requiredField(ctx, obj, "totalLines", joinFieldPath(fieldPath, "totalLines")), joinFieldPath(fieldPath, "totalLines")),
|
|
543
|
+
maxLines: requiredNumber(ctx, requiredField(ctx, obj, "maxLines", joinFieldPath(fieldPath, "maxLines")), joinFieldPath(fieldPath, "maxLines")),
|
|
544
|
+
skippedBlocks: requiredArray(ctx, requiredField(ctx, obj, "skippedBlocks", joinFieldPath(fieldPath, "skippedBlocks")), joinFieldPath(fieldPath, "skippedBlocks")).map((item, i) => validateSelectedSourceBundleSkippedBlock(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "skippedBlocks"), i))),
|
|
545
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
546
|
+
};
|
|
547
|
+
if (optionalField(obj, "focusNodeId") !== undefined)
|
|
548
|
+
result.focusNodeId = optionalString(ctx, obj.focusNodeId, joinFieldPath(fieldPath, "focusNodeId"));
|
|
549
|
+
return result;
|
|
550
|
+
}
|
|
551
|
+
function validateSelectedSourceBundles(ctx, value, fieldPath) {
|
|
552
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
553
|
+
return {
|
|
554
|
+
bundles: requiredArray(ctx, requiredField(ctx, obj, "bundles", joinFieldPath(fieldPath, "bundles")), joinFieldPath(fieldPath, "bundles")).map((item, i) => validateSelectedSourceBundle(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "bundles"), i))),
|
|
555
|
+
omittedBundleCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "omittedBundleCount", joinFieldPath(fieldPath, "omittedBundleCount")), joinFieldPath(fieldPath, "omittedBundleCount")),
|
|
556
|
+
totalSelectedLines: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "totalSelectedLines", joinFieldPath(fieldPath, "totalSelectedLines")), joinFieldPath(fieldPath, "totalSelectedLines")),
|
|
557
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
558
|
+
};
|
|
559
|
+
}
|
|
560
|
+
function validateSemanticSummaryEntry(ctx, value, fieldPath) {
|
|
561
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
562
|
+
return {
|
|
563
|
+
roles: requiredArray(ctx, requiredField(ctx, obj, "roles", joinFieldPath(fieldPath, "roles")), joinFieldPath(fieldPath, "roles")).map((item, i) => validateSemanticRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "roles"), i))),
|
|
564
|
+
artifactRefs: requiredArray(ctx, requiredField(ctx, obj, "artifactRefs", joinFieldPath(fieldPath, "artifactRefs")), joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i))),
|
|
565
|
+
evidenceRefs: requiredArray(ctx, requiredField(ctx, obj, "evidenceRefs", joinFieldPath(fieldPath, "evidenceRefs")), joinFieldPath(fieldPath, "evidenceRefs")).map((item, i) => validateSemanticEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "evidenceRefs"), i)))
|
|
566
|
+
};
|
|
567
|
+
}
|
|
568
|
+
function validateRecordOf(ctx, value, fieldPath, elementValidator) {
|
|
569
|
+
const obj = requiredRecord(ctx, value, fieldPath);
|
|
570
|
+
const result = {};
|
|
571
|
+
for (const [key, val] of Object.entries(obj)) {
|
|
572
|
+
result[key] = elementValidator(ctx, val, joinFieldPath(fieldPath, key));
|
|
573
|
+
}
|
|
574
|
+
return result;
|
|
575
|
+
}
|
|
576
|
+
function validateSemanticSummary(ctx, value, fieldPath) {
|
|
577
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
578
|
+
return {
|
|
579
|
+
available: requiredBoolean(ctx, requiredField(ctx, obj, "available", joinFieldPath(fieldPath, "available")), joinFieldPath(fieldPath, "available")),
|
|
580
|
+
roles: requiredArray(ctx, requiredField(ctx, obj, "roles", joinFieldPath(fieldPath, "roles")), joinFieldPath(fieldPath, "roles")).map((item, i) => validateSemanticRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "roles"), i))),
|
|
581
|
+
artifactRefs: requiredArray(ctx, requiredField(ctx, obj, "artifactRefs", joinFieldPath(fieldPath, "artifactRefs")), joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateSemanticArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i))),
|
|
582
|
+
evidenceRefs: requiredArray(ctx, requiredField(ctx, obj, "evidenceRefs", joinFieldPath(fieldPath, "evidenceRefs")), joinFieldPath(fieldPath, "evidenceRefs")).map((item, i) => validateSemanticEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "evidenceRefs"), i))),
|
|
583
|
+
summariesByNode: validateRecordOf(ctx, requiredField(ctx, obj, "summariesByNode", joinFieldPath(fieldPath, "summariesByNode")), joinFieldPath(fieldPath, "summariesByNode"), validateSemanticSummaryEntry),
|
|
584
|
+
summariesByFile: validateRecordOf(ctx, requiredField(ctx, obj, "summariesByFile", joinFieldPath(fieldPath, "summariesByFile")), joinFieldPath(fieldPath, "summariesByFile"), validateSemanticSummaryEntry),
|
|
585
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
586
|
+
};
|
|
587
|
+
}
|
|
588
|
+
function validateClassificationSummaryEntry(ctx, value, fieldPath) {
|
|
589
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
590
|
+
return {
|
|
591
|
+
classifications: requiredArray(ctx, requiredField(ctx, obj, "classifications", joinFieldPath(fieldPath, "classifications")), joinFieldPath(fieldPath, "classifications")).map((item, i) => validateClassificationRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "classifications"), i))),
|
|
592
|
+
editGuidance: requiredLiteral(ctx, requiredField(ctx, obj, "editGuidance", joinFieldPath(fieldPath, "editGuidance")), joinFieldPath(fieldPath, "editGuidance"), EDIT_GUIDANCES),
|
|
593
|
+
readiness: requiredLiteral(ctx, requiredField(ctx, obj, "readiness", joinFieldPath(fieldPath, "readiness")), joinFieldPath(fieldPath, "readiness"), READINESSES),
|
|
594
|
+
risks: requiredArray(ctx, requiredField(ctx, obj, "risks", joinFieldPath(fieldPath, "risks")), joinFieldPath(fieldPath, "risks")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "risks"), i), RISK_LABELS)),
|
|
595
|
+
uncertainty: requiredLiteral(ctx, requiredField(ctx, obj, "uncertainty", joinFieldPath(fieldPath, "uncertainty")), joinFieldPath(fieldPath, "uncertainty"), UNCERTAINTY_TIERS),
|
|
596
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
function validateClassificationSummary(ctx, value, fieldPath) {
|
|
600
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
601
|
+
return {
|
|
602
|
+
available: requiredBoolean(ctx, requiredField(ctx, obj, "available", joinFieldPath(fieldPath, "available")), joinFieldPath(fieldPath, "available")),
|
|
603
|
+
classificationArtifactPath: requiredNullableString(ctx, requiredField(ctx, obj, "classificationArtifactPath", joinFieldPath(fieldPath, "classificationArtifactPath")), joinFieldPath(fieldPath, "classificationArtifactPath")),
|
|
604
|
+
roles: requiredArray(ctx, requiredField(ctx, obj, "roles", joinFieldPath(fieldPath, "roles")), joinFieldPath(fieldPath, "roles")).map((item, i) => validateClassificationRole(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "roles"), i))),
|
|
605
|
+
refs: requiredArray(ctx, requiredField(ctx, obj, "refs", joinFieldPath(fieldPath, "refs")), joinFieldPath(fieldPath, "refs")).map((item, i) => validateSemanticEvidenceRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "refs"), i))),
|
|
606
|
+
editGuidance: requiredArray(ctx, requiredField(ctx, obj, "editGuidance", joinFieldPath(fieldPath, "editGuidance")), joinFieldPath(fieldPath, "editGuidance")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "editGuidance"), i), EDIT_GUIDANCES)),
|
|
607
|
+
readiness: requiredArray(ctx, requiredField(ctx, obj, "readiness", joinFieldPath(fieldPath, "readiness")), joinFieldPath(fieldPath, "readiness")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "readiness"), i), READINESSES)),
|
|
608
|
+
riskLabels: requiredArray(ctx, requiredField(ctx, obj, "riskLabels", joinFieldPath(fieldPath, "riskLabels")), joinFieldPath(fieldPath, "riskLabels")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "riskLabels"), i), RISK_LABELS)),
|
|
609
|
+
uncertainty: requiredArray(ctx, requiredField(ctx, obj, "uncertainty", joinFieldPath(fieldPath, "uncertainty")), joinFieldPath(fieldPath, "uncertainty")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "uncertainty"), i), UNCERTAINTY_TIERS)),
|
|
610
|
+
summariesByNode: validateRecordOf(ctx, requiredField(ctx, obj, "summariesByNode", joinFieldPath(fieldPath, "summariesByNode")), joinFieldPath(fieldPath, "summariesByNode"), validateClassificationSummaryEntry),
|
|
611
|
+
summariesByFile: validateRecordOf(ctx, requiredField(ctx, obj, "summariesByFile", joinFieldPath(fieldPath, "summariesByFile")), joinFieldPath(fieldPath, "summariesByFile"), validateClassificationSummaryEntry),
|
|
612
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
613
|
+
};
|
|
614
|
+
}
|
|
615
|
+
function validateArtifactReferenceSummaryEntry(ctx, value, fieldPath) {
|
|
616
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
617
|
+
return {
|
|
618
|
+
artifactKind: requiredString(ctx, requiredField(ctx, obj, "artifactKind", joinFieldPath(fieldPath, "artifactKind")), joinFieldPath(fieldPath, "artifactKind")),
|
|
619
|
+
artifactPath: requiredNullableString(ctx, requiredField(ctx, obj, "artifactPath", joinFieldPath(fieldPath, "artifactPath")), joinFieldPath(fieldPath, "artifactPath")),
|
|
620
|
+
available: requiredBoolean(ctx, requiredField(ctx, obj, "available", joinFieldPath(fieldPath, "available")), joinFieldPath(fieldPath, "available")),
|
|
621
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
622
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
623
|
+
};
|
|
624
|
+
}
|
|
625
|
+
function validatePruningCounts(ctx, value, fieldPath) {
|
|
626
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
627
|
+
const reqInt = (key) => requiredNonnegativeInteger(ctx, requiredField(ctx, obj, key, joinFieldPath(fieldPath, key)), joinFieldPath(fieldPath, key));
|
|
628
|
+
return {
|
|
629
|
+
candidateFiles: reqInt("candidateFiles"),
|
|
630
|
+
candidateNodes: reqInt("candidateNodes"),
|
|
631
|
+
graphNodes: reqInt("graphNodes"),
|
|
632
|
+
graphEdges: reqInt("graphEdges"),
|
|
633
|
+
sourceSlices: reqInt("sourceSlices"),
|
|
634
|
+
sourceBundles: reqInt("sourceBundles")
|
|
635
|
+
};
|
|
636
|
+
}
|
|
637
|
+
function validatePruningCapSettings(ctx, value, fieldPath) {
|
|
638
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
639
|
+
return {
|
|
640
|
+
maxCandidateFiles: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxCandidateFiles", joinFieldPath(fieldPath, "maxCandidateFiles")), joinFieldPath(fieldPath, "maxCandidateFiles")),
|
|
641
|
+
maxGraphNodes: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxGraphNodes", joinFieldPath(fieldPath, "maxGraphNodes")), joinFieldPath(fieldPath, "maxGraphNodes")),
|
|
642
|
+
maxGraphEdges: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxGraphEdges", joinFieldPath(fieldPath, "maxGraphEdges")), joinFieldPath(fieldPath, "maxGraphEdges")),
|
|
643
|
+
maxSourceSlices: requiredNumber(ctx, requiredField(ctx, obj, "maxSourceSlices", joinFieldPath(fieldPath, "maxSourceSlices")), joinFieldPath(fieldPath, "maxSourceSlices"))
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
function validatePruningSummary(ctx, value, fieldPath) {
|
|
647
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
648
|
+
return {
|
|
649
|
+
policyVersion: requiredLiteral(ctx, requiredField(ctx, obj, "policyVersion", joinFieldPath(fieldPath, "policyVersion")), joinFieldPath(fieldPath, "policyVersion"), ["1.0.0"]),
|
|
650
|
+
retainedCounts: validatePruningCounts(ctx, requiredField(ctx, obj, "retainedCounts", joinFieldPath(fieldPath, "retainedCounts")), joinFieldPath(fieldPath, "retainedCounts")),
|
|
651
|
+
droppedCounts: validatePruningCounts(ctx, requiredField(ctx, obj, "droppedCounts", joinFieldPath(fieldPath, "droppedCounts")), joinFieldPath(fieldPath, "droppedCounts")),
|
|
652
|
+
capSettings: validatePruningCapSettings(ctx, requiredField(ctx, obj, "capSettings", joinFieldPath(fieldPath, "capSettings")), joinFieldPath(fieldPath, "capSettings")),
|
|
653
|
+
retainedReasons: requiredStringArray(ctx, requiredField(ctx, obj, "retainedReasons", joinFieldPath(fieldPath, "retainedReasons")), joinFieldPath(fieldPath, "retainedReasons")),
|
|
654
|
+
droppedReasons: requiredStringArray(ctx, requiredField(ctx, obj, "droppedReasons", joinFieldPath(fieldPath, "droppedReasons")), joinFieldPath(fieldPath, "droppedReasons")),
|
|
655
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
656
|
+
};
|
|
657
|
+
}
|
|
658
|
+
function validateModeEffect(ctx, value, fieldPath) {
|
|
659
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
660
|
+
return {
|
|
661
|
+
candidateId: requiredString(ctx, requiredField(ctx, obj, "candidateId", joinFieldPath(fieldPath, "candidateId")), joinFieldPath(fieldPath, "candidateId")),
|
|
662
|
+
adjustment: requiredNumber(ctx, requiredField(ctx, obj, "adjustment", joinFieldPath(fieldPath, "adjustment")), joinFieldPath(fieldPath, "adjustment")),
|
|
663
|
+
reasons: requiredStringArray(ctx, requiredField(ctx, obj, "reasons", joinFieldPath(fieldPath, "reasons")), joinFieldPath(fieldPath, "reasons"))
|
|
664
|
+
};
|
|
665
|
+
}
|
|
666
|
+
function validateModeEffects(ctx, value, fieldPath) {
|
|
667
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
668
|
+
return {
|
|
669
|
+
mode: requiredLiteral(ctx, requiredField(ctx, obj, "mode", joinFieldPath(fieldPath, "mode")), joinFieldPath(fieldPath, "mode"), CONTEXT_CAPSULE_MODES),
|
|
670
|
+
applied: requiredBoolean(ctx, requiredField(ctx, obj, "applied", joinFieldPath(fieldPath, "applied")), joinFieldPath(fieldPath, "applied")),
|
|
671
|
+
effects: requiredArray(ctx, requiredField(ctx, obj, "effects", joinFieldPath(fieldPath, "effects")), joinFieldPath(fieldPath, "effects")).map((item, i) => validateModeEffect(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "effects"), i))),
|
|
672
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
673
|
+
};
|
|
674
|
+
}
|
|
675
|
+
function validateSourceControl(ctx, value, fieldPath) {
|
|
676
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
677
|
+
return {
|
|
678
|
+
enabled: requiredBoolean(ctx, requiredField(ctx, obj, "enabled", joinFieldPath(fieldPath, "enabled")), joinFieldPath(fieldPath, "enabled")),
|
|
679
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason"))
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
function validateContextConflictCandidate(ctx, value, fieldPath) {
|
|
683
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
684
|
+
return {
|
|
685
|
+
nodeId: requiredString(ctx, requiredField(ctx, obj, "nodeId", joinFieldPath(fieldPath, "nodeId")), joinFieldPath(fieldPath, "nodeId")),
|
|
686
|
+
filePath: requiredNullableString(ctx, requiredField(ctx, obj, "filePath", joinFieldPath(fieldPath, "filePath")), joinFieldPath(fieldPath, "filePath")),
|
|
687
|
+
score: requiredNumber(ctx, requiredField(ctx, obj, "score", joinFieldPath(fieldPath, "score")), joinFieldPath(fieldPath, "score")),
|
|
688
|
+
editGuidance: requiredArray(ctx, requiredField(ctx, obj, "editGuidance", joinFieldPath(fieldPath, "editGuidance")), joinFieldPath(fieldPath, "editGuidance")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "editGuidance"), i), EDIT_GUIDANCES))
|
|
689
|
+
};
|
|
690
|
+
}
|
|
691
|
+
function validateContextConflict(ctx, value, fieldPath) {
|
|
692
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
693
|
+
return {
|
|
694
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
695
|
+
status: requiredLiteral(ctx, requiredField(ctx, obj, "status", joinFieldPath(fieldPath, "status")), joinFieldPath(fieldPath, "status"), [
|
|
696
|
+
"conflict"
|
|
697
|
+
]),
|
|
698
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
699
|
+
evidenceRefs: requiredStringArray(ctx, requiredField(ctx, obj, "evidenceRefs", joinFieldPath(fieldPath, "evidenceRefs")), joinFieldPath(fieldPath, "evidenceRefs")),
|
|
700
|
+
affectedFiles: requiredStringArray(ctx, requiredField(ctx, obj, "affectedFiles", joinFieldPath(fieldPath, "affectedFiles")), joinFieldPath(fieldPath, "affectedFiles")),
|
|
701
|
+
affectedNodes: requiredStringArray(ctx, requiredField(ctx, obj, "affectedNodes", joinFieldPath(fieldPath, "affectedNodes")), joinFieldPath(fieldPath, "affectedNodes")),
|
|
702
|
+
candidates: requiredArray(ctx, requiredField(ctx, obj, "candidates", joinFieldPath(fieldPath, "candidates")), joinFieldPath(fieldPath, "candidates")).map((item, i) => validateContextConflictCandidate(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "candidates"), i))),
|
|
703
|
+
recommendedNextAction: requiredString(ctx, requiredField(ctx, obj, "recommendedNextAction", joinFieldPath(fieldPath, "recommendedNextAction")), joinFieldPath(fieldPath, "recommendedNextAction"))
|
|
704
|
+
};
|
|
705
|
+
}
|
|
706
|
+
function validateContextConflictSummary(ctx, value, fieldPath) {
|
|
707
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
708
|
+
return {
|
|
709
|
+
status: requiredLiteral(ctx, requiredField(ctx, obj, "status", joinFieldPath(fieldPath, "status")), joinFieldPath(fieldPath, "status"), [
|
|
710
|
+
"none",
|
|
711
|
+
"conflict"
|
|
712
|
+
]),
|
|
713
|
+
conflicts: requiredArray(ctx, requiredField(ctx, obj, "conflicts", joinFieldPath(fieldPath, "conflicts")), joinFieldPath(fieldPath, "conflicts")).map((item, i) => validateContextConflict(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "conflicts"), i))),
|
|
714
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
715
|
+
};
|
|
716
|
+
}
|
|
717
|
+
function validateFocusFileResolution(ctx, value, fieldPath) {
|
|
718
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
719
|
+
return {
|
|
720
|
+
path: requiredString(ctx, requiredField(ctx, obj, "path", joinFieldPath(fieldPath, "path")), joinFieldPath(fieldPath, "path")),
|
|
721
|
+
resolved: requiredBoolean(ctx, requiredField(ctx, obj, "resolved", joinFieldPath(fieldPath, "resolved")), joinFieldPath(fieldPath, "resolved")),
|
|
722
|
+
matchedFilePaths: requiredStringArray(ctx, requiredField(ctx, obj, "matchedFilePaths", joinFieldPath(fieldPath, "matchedFilePaths")), joinFieldPath(fieldPath, "matchedFilePaths")),
|
|
723
|
+
containedSymbolIds: requiredStringArray(ctx, requiredField(ctx, obj, "containedSymbolIds", joinFieldPath(fieldPath, "containedSymbolIds")), joinFieldPath(fieldPath, "containedSymbolIds"))
|
|
724
|
+
};
|
|
725
|
+
}
|
|
726
|
+
function validateFocusSymbolResolution(ctx, value, fieldPath) {
|
|
727
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
728
|
+
return {
|
|
729
|
+
symbol: requiredString(ctx, requiredField(ctx, obj, "symbol", joinFieldPath(fieldPath, "symbol")), joinFieldPath(fieldPath, "symbol")),
|
|
730
|
+
resolved: requiredBoolean(ctx, requiredField(ctx, obj, "resolved", joinFieldPath(fieldPath, "resolved")), joinFieldPath(fieldPath, "resolved")),
|
|
731
|
+
ambiguous: requiredBoolean(ctx, requiredField(ctx, obj, "ambiguous", joinFieldPath(fieldPath, "ambiguous")), joinFieldPath(fieldPath, "ambiguous")),
|
|
732
|
+
matchedNodeIds: requiredStringArray(ctx, requiredField(ctx, obj, "matchedNodeIds", joinFieldPath(fieldPath, "matchedNodeIds")), joinFieldPath(fieldPath, "matchedNodeIds"))
|
|
733
|
+
};
|
|
734
|
+
}
|
|
735
|
+
function validateContextFocusIntake(ctx, value, fieldPath) {
|
|
736
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
737
|
+
return {
|
|
738
|
+
focusFiles: requiredArray(ctx, requiredField(ctx, obj, "focusFiles", joinFieldPath(fieldPath, "focusFiles")), joinFieldPath(fieldPath, "focusFiles")).map((item, i) => validateFocusFileResolution(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "focusFiles"), i))),
|
|
739
|
+
focusSymbols: requiredArray(ctx, requiredField(ctx, obj, "focusSymbols", joinFieldPath(fieldPath, "focusSymbols")), joinFieldPath(fieldPath, "focusSymbols")).map((item, i) => validateFocusSymbolResolution(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "focusSymbols"), i))),
|
|
740
|
+
unresolvedFocusFiles: requiredStringArray(ctx, requiredField(ctx, obj, "unresolvedFocusFiles", joinFieldPath(fieldPath, "unresolvedFocusFiles")), joinFieldPath(fieldPath, "unresolvedFocusFiles")),
|
|
741
|
+
unresolvedFocusSymbols: requiredStringArray(ctx, requiredField(ctx, obj, "unresolvedFocusSymbols", joinFieldPath(fieldPath, "unresolvedFocusSymbols")), joinFieldPath(fieldPath, "unresolvedFocusSymbols")),
|
|
742
|
+
ambiguousFocusSymbols: requiredStringArray(ctx, requiredField(ctx, obj, "ambiguousFocusSymbols", joinFieldPath(fieldPath, "ambiguousFocusSymbols")), joinFieldPath(fieldPath, "ambiguousFocusSymbols")),
|
|
743
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
744
|
+
};
|
|
745
|
+
}
|
|
746
|
+
function validateChangedFileEntry(ctx, value, fieldPath) {
|
|
747
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
748
|
+
return {
|
|
749
|
+
path: requiredString(ctx, requiredField(ctx, obj, "path", joinFieldPath(fieldPath, "path")), joinFieldPath(fieldPath, "path")),
|
|
750
|
+
status: requiredLiteral(ctx, requiredField(ctx, obj, "status", joinFieldPath(fieldPath, "status")), joinFieldPath(fieldPath, "status"), CHANGED_SURFACE_STATUSES),
|
|
751
|
+
provenance: requiredLiteral(ctx, requiredField(ctx, obj, "provenance", joinFieldPath(fieldPath, "provenance")), joinFieldPath(fieldPath, "provenance"), CHANGED_SURFACE_PROVENANCES)
|
|
752
|
+
};
|
|
753
|
+
}
|
|
754
|
+
function validateChangedSymbolEntry(ctx, value, fieldPath) {
|
|
755
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
756
|
+
const result = {
|
|
757
|
+
symbolId: requiredString(ctx, requiredField(ctx, obj, "symbolId", joinFieldPath(fieldPath, "symbolId")), joinFieldPath(fieldPath, "symbolId")),
|
|
758
|
+
status: requiredLiteral(ctx, requiredField(ctx, obj, "status", joinFieldPath(fieldPath, "status")), joinFieldPath(fieldPath, "status"), CHANGED_SURFACE_STATUSES),
|
|
759
|
+
provenance: requiredLiteral(ctx, requiredField(ctx, obj, "provenance", joinFieldPath(fieldPath, "provenance")), joinFieldPath(fieldPath, "provenance"), CHANGED_SURFACE_PROVENANCES)
|
|
760
|
+
};
|
|
761
|
+
if (optionalField(obj, "filePath") !== undefined)
|
|
762
|
+
result.filePath = optionalString(ctx, obj.filePath, joinFieldPath(fieldPath, "filePath"));
|
|
763
|
+
if (optionalField(obj, "name") !== undefined)
|
|
764
|
+
result.name = optionalString(ctx, obj.name, joinFieldPath(fieldPath, "name"));
|
|
765
|
+
if (optionalField(obj, "kind") !== undefined)
|
|
766
|
+
result.kind = optionalString(ctx, obj.kind, joinFieldPath(fieldPath, "kind"));
|
|
767
|
+
return result;
|
|
768
|
+
}
|
|
769
|
+
function validateChangedSurface(ctx, value, fieldPath) {
|
|
770
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
771
|
+
return {
|
|
772
|
+
available: requiredBoolean(ctx, requiredField(ctx, obj, "available", joinFieldPath(fieldPath, "available")), joinFieldPath(fieldPath, "available")),
|
|
773
|
+
diffRequested: requiredBoolean(ctx, requiredField(ctx, obj, "diffRequested", joinFieldPath(fieldPath, "diffRequested")), joinFieldPath(fieldPath, "diffRequested")),
|
|
774
|
+
files: requiredArray(ctx, requiredField(ctx, obj, "files", joinFieldPath(fieldPath, "files")), joinFieldPath(fieldPath, "files")).map((item, i) => validateChangedFileEntry(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "files"), i))),
|
|
775
|
+
symbols: requiredArray(ctx, requiredField(ctx, obj, "symbols", joinFieldPath(fieldPath, "symbols")), joinFieldPath(fieldPath, "symbols")).map((item, i) => validateChangedSymbolEntry(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "symbols"), i))),
|
|
776
|
+
conflicts: requiredStringArray(ctx, requiredField(ctx, obj, "conflicts", joinFieldPath(fieldPath, "conflicts")), joinFieldPath(fieldPath, "conflicts")),
|
|
777
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
778
|
+
};
|
|
779
|
+
}
|
|
780
|
+
export function validateRoleContextSummary(ctx, value, fieldPath) {
|
|
781
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
782
|
+
return {
|
|
783
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
784
|
+
focus: validateContextFocusIntake(ctx, requiredField(ctx, obj, "focus", joinFieldPath(fieldPath, "focus")), joinFieldPath(fieldPath, "focus")),
|
|
785
|
+
changedSurface: validateChangedSurface(ctx, requiredField(ctx, obj, "changedSurface", joinFieldPath(fieldPath, "changedSurface")), joinFieldPath(fieldPath, "changedSurface")),
|
|
786
|
+
requestedEvidenceKinds: requiredArray(ctx, requiredField(ctx, obj, "requestedEvidenceKinds", joinFieldPath(fieldPath, "requestedEvidenceKinds")), joinFieldPath(fieldPath, "requestedEvidenceKinds")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "requestedEvidenceKinds"), i), REQUESTED_EVIDENCE_KINDS)),
|
|
787
|
+
unsupportedRequestedEvidenceKinds: requiredArray(ctx, requiredField(ctx, obj, "unsupportedRequestedEvidenceKinds", joinFieldPath(fieldPath, "unsupportedRequestedEvidenceKinds")), joinFieldPath(fieldPath, "unsupportedRequestedEvidenceKinds")).map((item, i) => requiredLiteral(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "unsupportedRequestedEvidenceKinds"), i), REQUESTED_EVIDENCE_KINDS)),
|
|
788
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
789
|
+
};
|
|
790
|
+
}
|
|
791
|
+
function validateEvidenceItemSourceLocation(ctx, value, fieldPath) {
|
|
792
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
793
|
+
const result = {
|
|
794
|
+
filePath: requiredString(ctx, requiredField(ctx, obj, "filePath", joinFieldPath(fieldPath, "filePath")), joinFieldPath(fieldPath, "filePath"))
|
|
795
|
+
};
|
|
796
|
+
if (optionalField(obj, "line") !== undefined)
|
|
797
|
+
result.line = optionalNumber(ctx, obj.line, joinFieldPath(fieldPath, "line"));
|
|
798
|
+
return result;
|
|
799
|
+
}
|
|
800
|
+
function validateEvidenceItemRef(ctx, value, fieldPath) {
|
|
801
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
802
|
+
const result = {
|
|
803
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
804
|
+
itemKind: requiredLiteral(ctx, requiredField(ctx, obj, "itemKind", joinFieldPath(fieldPath, "itemKind")), joinFieldPath(fieldPath, "itemKind"), EVIDENCE_ITEM_KINDS),
|
|
805
|
+
relationship: requiredString(ctx, requiredField(ctx, obj, "relationship", joinFieldPath(fieldPath, "relationship")), joinFieldPath(fieldPath, "relationship")),
|
|
806
|
+
basis: requiredString(ctx, requiredField(ctx, obj, "basis", joinFieldPath(fieldPath, "basis")), joinFieldPath(fieldPath, "basis")),
|
|
807
|
+
provenance: requiredString(ctx, requiredField(ctx, obj, "provenance", joinFieldPath(fieldPath, "provenance")), joinFieldPath(fieldPath, "provenance"))
|
|
808
|
+
};
|
|
809
|
+
if (optionalField(obj, "path") !== undefined)
|
|
810
|
+
result.path = optionalString(ctx, obj.path, joinFieldPath(fieldPath, "path"));
|
|
811
|
+
if (optionalField(obj, "symbolId") !== undefined)
|
|
812
|
+
result.symbolId = optionalString(ctx, obj.symbolId, joinFieldPath(fieldPath, "symbolId"));
|
|
813
|
+
if (optionalField(obj, "nodeId") !== undefined)
|
|
814
|
+
result.nodeId = optionalString(ctx, obj.nodeId, joinFieldPath(fieldPath, "nodeId"));
|
|
815
|
+
if (optionalField(obj, "sourceLocation") !== undefined)
|
|
816
|
+
result.sourceLocation = validateEvidenceItemSourceLocation(ctx, obj.sourceLocation, joinFieldPath(fieldPath, "sourceLocation"));
|
|
817
|
+
if (optionalField(obj, "metadata") !== undefined) {
|
|
818
|
+
const recordObj = requiredRecord(ctx, obj.metadata, joinFieldPath(fieldPath, "metadata"));
|
|
819
|
+
const record = {};
|
|
820
|
+
for (const [key, val] of Object.entries(recordObj)) {
|
|
821
|
+
record[key] = requiredScalarLike(ctx, val, joinFieldPath(joinFieldPath(fieldPath, "metadata"), key));
|
|
822
|
+
}
|
|
823
|
+
result.metadata = record;
|
|
824
|
+
}
|
|
825
|
+
return result;
|
|
826
|
+
}
|
|
827
|
+
function validateUnresolvedEvidenceItem(ctx, value, fieldPath) {
|
|
828
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
829
|
+
return {
|
|
830
|
+
evidenceKind: requiredString(ctx, requiredField(ctx, obj, "evidenceKind", joinFieldPath(fieldPath, "evidenceKind")), joinFieldPath(fieldPath, "evidenceKind")),
|
|
831
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
832
|
+
basis: requiredString(ctx, requiredField(ctx, obj, "basis", joinFieldPath(fieldPath, "basis")), joinFieldPath(fieldPath, "basis")),
|
|
833
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
834
|
+
blocking: requiredBoolean(ctx, requiredField(ctx, obj, "blocking", joinFieldPath(fieldPath, "blocking")), joinFieldPath(fieldPath, "blocking"))
|
|
835
|
+
};
|
|
836
|
+
}
|
|
837
|
+
function validateEvidenceGroup(ctx, value, fieldPath) {
|
|
838
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
839
|
+
return {
|
|
840
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
841
|
+
kind: requiredLiteral(ctx, requiredField(ctx, obj, "kind", joinFieldPath(fieldPath, "kind")), joinFieldPath(fieldPath, "kind"), EVIDENCE_GROUP_KINDS),
|
|
842
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
843
|
+
title: requiredString(ctx, requiredField(ctx, obj, "title", joinFieldPath(fieldPath, "title")), joinFieldPath(fieldPath, "title")),
|
|
844
|
+
required: requiredBoolean(ctx, requiredField(ctx, obj, "required", joinFieldPath(fieldPath, "required")), joinFieldPath(fieldPath, "required")),
|
|
845
|
+
items: requiredArray(ctx, requiredField(ctx, obj, "items", joinFieldPath(fieldPath, "items")), joinFieldPath(fieldPath, "items")).map((item, i) => validateEvidenceItemRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "items"), i))),
|
|
846
|
+
unresolved: requiredArray(ctx, requiredField(ctx, obj, "unresolved", joinFieldPath(fieldPath, "unresolved")), joinFieldPath(fieldPath, "unresolved")).map((item, i) => validateUnresolvedEvidenceItem(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "unresolved"), i))),
|
|
847
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings")),
|
|
848
|
+
limit: requiredNullableNumber(ctx, requiredField(ctx, obj, "limit", joinFieldPath(fieldPath, "limit")), joinFieldPath(fieldPath, "limit")),
|
|
849
|
+
availableCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "availableCount", joinFieldPath(fieldPath, "availableCount")), joinFieldPath(fieldPath, "availableCount")),
|
|
850
|
+
usedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "usedCount", joinFieldPath(fieldPath, "usedCount")), joinFieldPath(fieldPath, "usedCount")),
|
|
851
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
852
|
+
droppedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "droppedCount", joinFieldPath(fieldPath, "droppedCount")), joinFieldPath(fieldPath, "droppedCount")),
|
|
853
|
+
provenance: requiredString(ctx, requiredField(ctx, obj, "provenance", joinFieldPath(fieldPath, "provenance")), joinFieldPath(fieldPath, "provenance"))
|
|
854
|
+
};
|
|
855
|
+
}
|
|
856
|
+
function validateTestConfigurationEvidenceEntry(ctx, value, fieldPath) {
|
|
857
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
858
|
+
const fieldsObj = requiredRecord(ctx, requiredField(ctx, obj, "fields", joinFieldPath(fieldPath, "fields")), joinFieldPath(fieldPath, "fields"));
|
|
859
|
+
const fields = {};
|
|
860
|
+
for (const [key, val] of Object.entries(fieldsObj)) {
|
|
861
|
+
fields[key] = requiredScalarOrStringArrayLike(ctx, val, joinFieldPath(joinFieldPath(fieldPath, "fields"), key));
|
|
862
|
+
}
|
|
863
|
+
return {
|
|
864
|
+
path: requiredString(ctx, requiredField(ctx, obj, "path", joinFieldPath(fieldPath, "path")), joinFieldPath(fieldPath, "path")),
|
|
865
|
+
framework: requiredString(ctx, requiredField(ctx, obj, "framework", joinFieldPath(fieldPath, "framework")), joinFieldPath(fieldPath, "framework")),
|
|
866
|
+
supported: requiredBoolean(ctx, requiredField(ctx, obj, "supported", joinFieldPath(fieldPath, "supported")), joinFieldPath(fieldPath, "supported")),
|
|
867
|
+
fields,
|
|
868
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
869
|
+
};
|
|
870
|
+
}
|
|
871
|
+
function validatePackageScriptEvidenceEntry(ctx, value, fieldPath) {
|
|
872
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
873
|
+
return {
|
|
874
|
+
name: requiredString(ctx, requiredField(ctx, obj, "name", joinFieldPath(fieldPath, "name")), joinFieldPath(fieldPath, "name")),
|
|
875
|
+
command: requiredString(ctx, requiredField(ctx, obj, "command", joinFieldPath(fieldPath, "command")), joinFieldPath(fieldPath, "command")),
|
|
876
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
877
|
+
packageJsonPath: requiredString(ctx, requiredField(ctx, obj, "packageJsonPath", joinFieldPath(fieldPath, "packageJsonPath")), joinFieldPath(fieldPath, "packageJsonPath"))
|
|
878
|
+
};
|
|
879
|
+
}
|
|
880
|
+
function validateTestCommandEvidenceEntry(ctx, value, fieldPath) {
|
|
881
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
882
|
+
const result = {
|
|
883
|
+
commandText: requiredNullableString(ctx, requiredField(ctx, obj, "commandText", joinFieldPath(fieldPath, "commandText")), joinFieldPath(fieldPath, "commandText")),
|
|
884
|
+
commandSource: requiredString(ctx, requiredField(ctx, obj, "commandSource", joinFieldPath(fieldPath, "commandSource")), joinFieldPath(fieldPath, "commandSource")),
|
|
885
|
+
testFiles: requiredStringArray(ctx, requiredField(ctx, obj, "testFiles", joinFieldPath(fieldPath, "testFiles")), joinFieldPath(fieldPath, "testFiles")),
|
|
886
|
+
framework: requiredNullableString(ctx, requiredField(ctx, obj, "framework", joinFieldPath(fieldPath, "framework")), joinFieldPath(fieldPath, "framework")),
|
|
887
|
+
scope: requiredLiteral(ctx, requiredField(ctx, obj, "scope", joinFieldPath(fieldPath, "scope")), joinFieldPath(fieldPath, "scope"), TEST_COMMAND_SCOPES),
|
|
888
|
+
basis: requiredString(ctx, requiredField(ctx, obj, "basis", joinFieldPath(fieldPath, "basis")), joinFieldPath(fieldPath, "basis"))
|
|
889
|
+
};
|
|
890
|
+
if (optionalField(obj, "unresolvedReason") !== undefined)
|
|
891
|
+
result.unresolvedReason = optionalString(ctx, obj.unresolvedReason, joinFieldPath(fieldPath, "unresolvedReason"));
|
|
892
|
+
return result;
|
|
893
|
+
}
|
|
894
|
+
function validateTestInfrastructureSummary(ctx, value, fieldPath) {
|
|
895
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
896
|
+
const reqRefArray = (key) => requiredArray(ctx, requiredField(ctx, obj, key, joinFieldPath(fieldPath, key)), joinFieldPath(fieldPath, key)).map((item, i) => validateEvidenceItemRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, key), i)));
|
|
897
|
+
return {
|
|
898
|
+
relatedTests: reqRefArray("relatedTests"),
|
|
899
|
+
fixtures: reqRefArray("fixtures"),
|
|
900
|
+
factories: reqRefArray("factories"),
|
|
901
|
+
mocks: reqRefArray("mocks"),
|
|
902
|
+
setupFiles: reqRefArray("setupFiles"),
|
|
903
|
+
testConfigurations: requiredArray(ctx, requiredField(ctx, obj, "testConfigurations", joinFieldPath(fieldPath, "testConfigurations")), joinFieldPath(fieldPath, "testConfigurations")).map((item, i) => validateTestConfigurationEvidenceEntry(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "testConfigurations"), i))),
|
|
904
|
+
packageScripts: requiredArray(ctx, requiredField(ctx, obj, "packageScripts", joinFieldPath(fieldPath, "packageScripts")), joinFieldPath(fieldPath, "packageScripts")).map((item, i) => validatePackageScriptEvidenceEntry(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "packageScripts"), i))),
|
|
905
|
+
testCommands: requiredArray(ctx, requiredField(ctx, obj, "testCommands", joinFieldPath(fieldPath, "testCommands")), joinFieldPath(fieldPath, "testCommands")).map((item, i) => validateTestCommandEvidenceEntry(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "testCommands"), i))),
|
|
906
|
+
unresolved: requiredArray(ctx, requiredField(ctx, obj, "unresolved", joinFieldPath(fieldPath, "unresolved")), joinFieldPath(fieldPath, "unresolved")).map((item, i) => validateUnresolvedEvidenceItem(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "unresolved"), i))),
|
|
907
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
908
|
+
};
|
|
909
|
+
}
|
|
910
|
+
function validateGroupTruncationEntry(ctx, value, fieldPath) {
|
|
911
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
912
|
+
return {
|
|
913
|
+
groupId: requiredString(ctx, requiredField(ctx, obj, "groupId", joinFieldPath(fieldPath, "groupId")), joinFieldPath(fieldPath, "groupId")),
|
|
914
|
+
limit: requiredNullableNumber(ctx, requiredField(ctx, obj, "limit", joinFieldPath(fieldPath, "limit")), joinFieldPath(fieldPath, "limit")),
|
|
915
|
+
availableCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "availableCount", joinFieldPath(fieldPath, "availableCount")), joinFieldPath(fieldPath, "availableCount")),
|
|
916
|
+
usedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "usedCount", joinFieldPath(fieldPath, "usedCount")), joinFieldPath(fieldPath, "usedCount")),
|
|
917
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
918
|
+
droppedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "droppedCount", joinFieldPath(fieldPath, "droppedCount")), joinFieldPath(fieldPath, "droppedCount"))
|
|
919
|
+
};
|
|
920
|
+
}
|
|
921
|
+
export function validateProvenanceRecord(ctx, value, fieldPath) {
|
|
922
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
923
|
+
return {
|
|
924
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
925
|
+
category: requiredLiteral(ctx, requiredField(ctx, obj, "category", joinFieldPath(fieldPath, "category")), joinFieldPath(fieldPath, "category"), PROVENANCE_CATEGORIES),
|
|
926
|
+
sourcePath: requiredNullableString(ctx, requiredField(ctx, obj, "sourcePath", joinFieldPath(fieldPath, "sourcePath")), joinFieldPath(fieldPath, "sourcePath")),
|
|
927
|
+
sourceId: requiredNullableString(ctx, requiredField(ctx, obj, "sourceId", joinFieldPath(fieldPath, "sourceId")), joinFieldPath(fieldPath, "sourceId")),
|
|
928
|
+
evidenceId: requiredString(ctx, requiredField(ctx, obj, "evidenceId", joinFieldPath(fieldPath, "evidenceId")), joinFieldPath(fieldPath, "evidenceId")),
|
|
929
|
+
relationshipBasis: requiredString(ctx, requiredField(ctx, obj, "relationshipBasis", joinFieldPath(fieldPath, "relationshipBasis")), joinFieldPath(fieldPath, "relationshipBasis")),
|
|
930
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
931
|
+
requestField: requiredNullableString(ctx, requiredField(ctx, obj, "requestField", joinFieldPath(fieldPath, "requestField")), joinFieldPath(fieldPath, "requestField")),
|
|
932
|
+
derivedByModule: requiredString(ctx, requiredField(ctx, obj, "derivedByModule", joinFieldPath(fieldPath, "derivedByModule")), joinFieldPath(fieldPath, "derivedByModule"))
|
|
933
|
+
};
|
|
934
|
+
}
|
|
935
|
+
function validateResponsibilityMapping(ctx, value, fieldPath) {
|
|
936
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
937
|
+
const reqRefArray = (key) => requiredArray(ctx, requiredField(ctx, obj, key, joinFieldPath(fieldPath, key)), joinFieldPath(fieldPath, key)).map((item, i) => validateEvidenceItemRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, key), i)));
|
|
938
|
+
return {
|
|
939
|
+
responsibilityId: requiredString(ctx, requiredField(ctx, obj, "responsibilityId", joinFieldPath(fieldPath, "responsibilityId")), joinFieldPath(fieldPath, "responsibilityId")),
|
|
940
|
+
behavior: requiredNullableString(ctx, requiredField(ctx, obj, "behavior", joinFieldPath(fieldPath, "behavior")), joinFieldPath(fieldPath, "behavior")),
|
|
941
|
+
invariant: requiredNullableString(ctx, requiredField(ctx, obj, "invariant", joinFieldPath(fieldPath, "invariant")), joinFieldPath(fieldPath, "invariant")),
|
|
942
|
+
criticality: requiredLiteral(ctx, requiredField(ctx, obj, "criticality", joinFieldPath(fieldPath, "criticality")), joinFieldPath(fieldPath, "criticality"), RESPONSIBILITY_CRITICALITIES),
|
|
943
|
+
productionSymbols: reqRefArray("productionSymbols"),
|
|
944
|
+
contracts: reqRefArray("contracts"),
|
|
945
|
+
validators: reqRefArray("validators"),
|
|
946
|
+
constants: reqRefArray("constants"),
|
|
947
|
+
errors: reqRefArray("errors"),
|
|
948
|
+
sideEffectEvidence: reqRefArray("sideEffectEvidence"),
|
|
949
|
+
proposedOrExistingTestFiles: reqRefArray("proposedOrExistingTestFiles"),
|
|
950
|
+
reusableHelpers: reqRefArray("reusableHelpers"),
|
|
951
|
+
oracleEvidence: reqRefArray("oracleEvidence"),
|
|
952
|
+
testCommands: reqRefArray("testCommands"),
|
|
953
|
+
mappingStatus: requiredLiteral(ctx, requiredField(ctx, obj, "mappingStatus", joinFieldPath(fieldPath, "mappingStatus")), joinFieldPath(fieldPath, "mappingStatus"), RESPONSIBILITY_MAPPING_STATUSES),
|
|
954
|
+
unresolvedReasons: requiredStringArray(ctx, requiredField(ctx, obj, "unresolvedReasons", joinFieldPath(fieldPath, "unresolvedReasons")), joinFieldPath(fieldPath, "unresolvedReasons")),
|
|
955
|
+
provenance: requiredArray(ctx, requiredField(ctx, obj, "provenance", joinFieldPath(fieldPath, "provenance")), joinFieldPath(fieldPath, "provenance")).map((item, i) => validateProvenanceRecord(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "provenance"), i))),
|
|
956
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
957
|
+
};
|
|
958
|
+
}
|
|
959
|
+
export function validateResponsibilityMappingSummary(ctx, value, fieldPath) {
|
|
960
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
961
|
+
return {
|
|
962
|
+
requested: requiredBoolean(ctx, requiredField(ctx, obj, "requested", joinFieldPath(fieldPath, "requested")), joinFieldPath(fieldPath, "requested")),
|
|
963
|
+
operational: requiredBoolean(ctx, requiredField(ctx, obj, "operational", joinFieldPath(fieldPath, "operational")), joinFieldPath(fieldPath, "operational")),
|
|
964
|
+
mappings: requiredArray(ctx, requiredField(ctx, obj, "mappings", joinFieldPath(fieldPath, "mappings")), joinFieldPath(fieldPath, "mappings")).map((item, i) => validateResponsibilityMapping(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "mappings"), i))),
|
|
965
|
+
unknownResponsibilityIds: requiredStringArray(ctx, requiredField(ctx, obj, "unknownResponsibilityIds", joinFieldPath(fieldPath, "unknownResponsibilityIds")), joinFieldPath(fieldPath, "unknownResponsibilityIds")),
|
|
966
|
+
duplicateResponsibilityIds: requiredStringArray(ctx, requiredField(ctx, obj, "duplicateResponsibilityIds", joinFieldPath(fieldPath, "duplicateResponsibilityIds")), joinFieldPath(fieldPath, "duplicateResponsibilityIds")),
|
|
967
|
+
limit: requiredNullableNumber(ctx, requiredField(ctx, obj, "limit", joinFieldPath(fieldPath, "limit")), joinFieldPath(fieldPath, "limit")),
|
|
968
|
+
availableCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "availableCount", joinFieldPath(fieldPath, "availableCount")), joinFieldPath(fieldPath, "availableCount")),
|
|
969
|
+
usedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "usedCount", joinFieldPath(fieldPath, "usedCount")), joinFieldPath(fieldPath, "usedCount")),
|
|
970
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
971
|
+
droppedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "droppedCount", joinFieldPath(fieldPath, "droppedCount")), joinFieldPath(fieldPath, "droppedCount")),
|
|
972
|
+
criticalDropped: requiredBoolean(ctx, requiredField(ctx, obj, "criticalDropped", joinFieldPath(fieldPath, "criticalDropped")), joinFieldPath(fieldPath, "criticalDropped")),
|
|
973
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
974
|
+
};
|
|
975
|
+
}
|
|
976
|
+
function validateFreshnessComparedIdentity(ctx, value, fieldPath) {
|
|
977
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
978
|
+
return {
|
|
979
|
+
label: requiredString(ctx, requiredField(ctx, obj, "label", joinFieldPath(fieldPath, "label")), joinFieldPath(fieldPath, "label")),
|
|
980
|
+
value: requiredNullableString(ctx, requiredField(ctx, obj, "value", joinFieldPath(fieldPath, "value")), joinFieldPath(fieldPath, "value"))
|
|
981
|
+
};
|
|
982
|
+
}
|
|
983
|
+
export function validateFreshnessSummary(ctx, value, fieldPath) {
|
|
984
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
985
|
+
return {
|
|
986
|
+
state: requiredLiteral(ctx, requiredField(ctx, obj, "state", joinFieldPath(fieldPath, "state")), joinFieldPath(fieldPath, "state"), FRESHNESS_STATES),
|
|
987
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
988
|
+
evidenceUsed: requiredStringArray(ctx, requiredField(ctx, obj, "evidenceUsed", joinFieldPath(fieldPath, "evidenceUsed")), joinFieldPath(fieldPath, "evidenceUsed")),
|
|
989
|
+
evidenceUnavailable: requiredStringArray(ctx, requiredField(ctx, obj, "evidenceUnavailable", joinFieldPath(fieldPath, "evidenceUnavailable")), joinFieldPath(fieldPath, "evidenceUnavailable")),
|
|
990
|
+
comparedIdentities: requiredArray(ctx, requiredField(ctx, obj, "comparedIdentities", joinFieldPath(fieldPath, "comparedIdentities")), joinFieldPath(fieldPath, "comparedIdentities")).map((item, i) => validateFreshnessComparedIdentity(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "comparedIdentities"), i))),
|
|
991
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
992
|
+
relevantChangedPaths: requiredStringArray(ctx, requiredField(ctx, obj, "relevantChangedPaths", joinFieldPath(fieldPath, "relevantChangedPaths")), joinFieldPath(fieldPath, "relevantChangedPaths")),
|
|
993
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
994
|
+
};
|
|
995
|
+
}
|
|
996
|
+
function validateBudgetLimitUsage(ctx, value, fieldPath) {
|
|
997
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
998
|
+
return {
|
|
999
|
+
name: requiredString(ctx, requiredField(ctx, obj, "name", joinFieldPath(fieldPath, "name")), joinFieldPath(fieldPath, "name")),
|
|
1000
|
+
declaredValue: requiredNullableNumber(ctx, requiredField(ctx, obj, "declaredValue", joinFieldPath(fieldPath, "declaredValue")), joinFieldPath(fieldPath, "declaredValue")),
|
|
1001
|
+
usedValue: requiredNumber(ctx, requiredField(ctx, obj, "usedValue", joinFieldPath(fieldPath, "usedValue")), joinFieldPath(fieldPath, "usedValue")),
|
|
1002
|
+
availableCount: requiredNullableNumber(ctx, requiredField(ctx, obj, "availableCount", joinFieldPath(fieldPath, "availableCount")), joinFieldPath(fieldPath, "availableCount")),
|
|
1003
|
+
droppedCount: requiredNullableNumber(ctx, requiredField(ctx, obj, "droppedCount", joinFieldPath(fieldPath, "droppedCount")), joinFieldPath(fieldPath, "droppedCount")),
|
|
1004
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
1005
|
+
requiredEvidenceAffected: requiredBoolean(ctx, requiredField(ctx, obj, "requiredEvidenceAffected", joinFieldPath(fieldPath, "requiredEvidenceAffected")), joinFieldPath(fieldPath, "requiredEvidenceAffected")),
|
|
1006
|
+
adequacyImpact: requiredNullableString(ctx, requiredField(ctx, obj, "adequacyImpact", joinFieldPath(fieldPath, "adequacyImpact")), joinFieldPath(fieldPath, "adequacyImpact"))
|
|
1007
|
+
};
|
|
1008
|
+
}
|
|
1009
|
+
function validateBudgetCharacterUsage(ctx, value, fieldPath) {
|
|
1010
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1011
|
+
return {
|
|
1012
|
+
measured: requiredNumber(ctx, requiredField(ctx, obj, "measured", joinFieldPath(fieldPath, "measured")), joinFieldPath(fieldPath, "measured")),
|
|
1013
|
+
limit: requiredNullableNumber(ctx, requiredField(ctx, obj, "limit", joinFieldPath(fieldPath, "limit")), joinFieldPath(fieldPath, "limit")),
|
|
1014
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated"))
|
|
1015
|
+
};
|
|
1016
|
+
}
|
|
1017
|
+
export function validateBudgetSummary(ctx, value, fieldPath) {
|
|
1018
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1019
|
+
const charactersValue = requiredField(ctx, obj, "characters", joinFieldPath(fieldPath, "characters"));
|
|
1020
|
+
return {
|
|
1021
|
+
limits: requiredArray(ctx, requiredField(ctx, obj, "limits", joinFieldPath(fieldPath, "limits")), joinFieldPath(fieldPath, "limits")).map((item, i) => validateBudgetLimitUsage(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "limits"), i))),
|
|
1022
|
+
characters: charactersValue === null ? null : validateBudgetCharacterUsage(ctx, charactersValue, joinFieldPath(fieldPath, "characters")),
|
|
1023
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
1024
|
+
};
|
|
1025
|
+
}
|
|
1026
|
+
function validateCapsuleTruncationRecord(ctx, value, fieldPath) {
|
|
1027
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1028
|
+
return {
|
|
1029
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
1030
|
+
affectedGroup: requiredString(ctx, requiredField(ctx, obj, "affectedGroup", joinFieldPath(fieldPath, "affectedGroup")), joinFieldPath(fieldPath, "affectedGroup")),
|
|
1031
|
+
limit: requiredNullableNumber(ctx, requiredField(ctx, obj, "limit", joinFieldPath(fieldPath, "limit")), joinFieldPath(fieldPath, "limit")),
|
|
1032
|
+
used: requiredNumber(ctx, requiredField(ctx, obj, "used", joinFieldPath(fieldPath, "used")), joinFieldPath(fieldPath, "used")),
|
|
1033
|
+
available: requiredNumber(ctx, requiredField(ctx, obj, "available", joinFieldPath(fieldPath, "available")), joinFieldPath(fieldPath, "available")),
|
|
1034
|
+
droppedCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "droppedCount", joinFieldPath(fieldPath, "droppedCount")), joinFieldPath(fieldPath, "droppedCount")),
|
|
1035
|
+
droppedEvidenceIds: requiredStringArray(ctx, requiredField(ctx, obj, "droppedEvidenceIds", joinFieldPath(fieldPath, "droppedEvidenceIds")), joinFieldPath(fieldPath, "droppedEvidenceIds")),
|
|
1036
|
+
requiredEvidenceLost: requiredBoolean(ctx, requiredField(ctx, obj, "requiredEvidenceLost", joinFieldPath(fieldPath, "requiredEvidenceLost")), joinFieldPath(fieldPath, "requiredEvidenceLost")),
|
|
1037
|
+
adequacyImpact: requiredNullableString(ctx, requiredField(ctx, obj, "adequacyImpact", joinFieldPath(fieldPath, "adequacyImpact")), joinFieldPath(fieldPath, "adequacyImpact")),
|
|
1038
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason"))
|
|
1039
|
+
};
|
|
1040
|
+
}
|
|
1041
|
+
export function validateTruncationSummary(ctx, value, fieldPath) {
|
|
1042
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1043
|
+
return {
|
|
1044
|
+
truncated: requiredBoolean(ctx, requiredField(ctx, obj, "truncated", joinFieldPath(fieldPath, "truncated")), joinFieldPath(fieldPath, "truncated")),
|
|
1045
|
+
records: requiredArray(ctx, requiredField(ctx, obj, "records", joinFieldPath(fieldPath, "records")), joinFieldPath(fieldPath, "records")).map((item, i) => validateCapsuleTruncationRecord(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "records"), i))),
|
|
1046
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
1047
|
+
};
|
|
1048
|
+
}
|
|
1049
|
+
function validateFullFileFallbackRecord(ctx, value, fieldPath) {
|
|
1050
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1051
|
+
return {
|
|
1052
|
+
id: requiredString(ctx, requiredField(ctx, obj, "id", joinFieldPath(fieldPath, "id")), joinFieldPath(fieldPath, "id")),
|
|
1053
|
+
filePath: requiredString(ctx, requiredField(ctx, obj, "filePath", joinFieldPath(fieldPath, "filePath")), joinFieldPath(fieldPath, "filePath")),
|
|
1054
|
+
reason: requiredString(ctx, requiredField(ctx, obj, "reason", joinFieldPath(fieldPath, "reason")), joinFieldPath(fieldPath, "reason")),
|
|
1055
|
+
requestedEvidenceKind: requiredNullableString(ctx, requiredField(ctx, obj, "requestedEvidenceKind", joinFieldPath(fieldPath, "requestedEvidenceKind")), joinFieldPath(fieldPath, "requestedEvidenceKind")),
|
|
1056
|
+
boundedRetrievalAttempted: requiredBoolean(ctx, requiredField(ctx, obj, "boundedRetrievalAttempted", joinFieldPath(fieldPath, "boundedRetrievalAttempted")), joinFieldPath(fieldPath, "boundedRetrievalAttempted")),
|
|
1057
|
+
sourceRangesAttempted: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "sourceRangesAttempted", joinFieldPath(fieldPath, "sourceRangesAttempted")), joinFieldPath(fieldPath, "sourceRangesAttempted")),
|
|
1058
|
+
includedLineCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "includedLineCount", joinFieldPath(fieldPath, "includedLineCount")), joinFieldPath(fieldPath, "includedLineCount")),
|
|
1059
|
+
includedCharacterCount: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "includedCharacterCount", joinFieldPath(fieldPath, "includedCharacterCount")), joinFieldPath(fieldPath, "includedCharacterCount")),
|
|
1060
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
1061
|
+
responsibilityIdsAffected: requiredStringArray(ctx, requiredField(ctx, obj, "responsibilityIdsAffected", joinFieldPath(fieldPath, "responsibilityIdsAffected")), joinFieldPath(fieldPath, "responsibilityIdsAffected")),
|
|
1062
|
+
allowed: requiredBoolean(ctx, requiredField(ctx, obj, "allowed", joinFieldPath(fieldPath, "allowed")), joinFieldPath(fieldPath, "allowed")),
|
|
1063
|
+
provenance: requiredString(ctx, requiredField(ctx, obj, "provenance", joinFieldPath(fieldPath, "provenance")), joinFieldPath(fieldPath, "provenance"))
|
|
1064
|
+
};
|
|
1065
|
+
}
|
|
1066
|
+
export function validateFullFileFallbackSummary(ctx, value, fieldPath) {
|
|
1067
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1068
|
+
return {
|
|
1069
|
+
enabled: requiredBoolean(ctx, requiredField(ctx, obj, "enabled", joinFieldPath(fieldPath, "enabled")), joinFieldPath(fieldPath, "enabled")),
|
|
1070
|
+
limit: requiredNullableNumber(ctx, requiredField(ctx, obj, "limit", joinFieldPath(fieldPath, "limit")), joinFieldPath(fieldPath, "limit")),
|
|
1071
|
+
used: requiredNonnegativeInteger(ctx, requiredField(ctx, obj, "used", joinFieldPath(fieldPath, "used")), joinFieldPath(fieldPath, "used")),
|
|
1072
|
+
fallbacks: requiredArray(ctx, requiredField(ctx, obj, "fallbacks", joinFieldPath(fieldPath, "fallbacks")), joinFieldPath(fieldPath, "fallbacks")).map((item, i) => validateFullFileFallbackRecord(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "fallbacks"), i))),
|
|
1073
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings"))
|
|
1074
|
+
};
|
|
1075
|
+
}
|
|
1076
|
+
export function validateRoleAdequacyStatement(ctx, value, fieldPath) {
|
|
1077
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1078
|
+
return {
|
|
1079
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
1080
|
+
status: requiredLiteral(ctx, requiredField(ctx, obj, "status", joinFieldPath(fieldPath, "status")), joinFieldPath(fieldPath, "status"), CONTEXT_ADEQUACY_STATUSES),
|
|
1081
|
+
requiredConditions: requiredStringArray(ctx, requiredField(ctx, obj, "requiredConditions", joinFieldPath(fieldPath, "requiredConditions")), joinFieldPath(fieldPath, "requiredConditions")),
|
|
1082
|
+
satisfiedConditions: requiredStringArray(ctx, requiredField(ctx, obj, "satisfiedConditions", joinFieldPath(fieldPath, "satisfiedConditions")), joinFieldPath(fieldPath, "satisfiedConditions")),
|
|
1083
|
+
missingConditions: requiredStringArray(ctx, requiredField(ctx, obj, "missingConditions", joinFieldPath(fieldPath, "missingConditions")), joinFieldPath(fieldPath, "missingConditions")),
|
|
1084
|
+
blockingConditions: requiredStringArray(ctx, requiredField(ctx, obj, "blockingConditions", joinFieldPath(fieldPath, "blockingConditions")), joinFieldPath(fieldPath, "blockingConditions")),
|
|
1085
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, obj, "warnings", joinFieldPath(fieldPath, "warnings")), joinFieldPath(fieldPath, "warnings")),
|
|
1086
|
+
supportingEvidence: requiredStringArray(ctx, requiredField(ctx, obj, "supportingEvidence", joinFieldPath(fieldPath, "supportingEvidence")), joinFieldPath(fieldPath, "supportingEvidence")),
|
|
1087
|
+
affectedResponsibilityIds: requiredStringArray(ctx, requiredField(ctx, obj, "affectedResponsibilityIds", joinFieldPath(fieldPath, "affectedResponsibilityIds")), joinFieldPath(fieldPath, "affectedResponsibilityIds")),
|
|
1088
|
+
truncationImpact: requiredBoolean(ctx, requiredField(ctx, obj, "truncationImpact", joinFieldPath(fieldPath, "truncationImpact")), joinFieldPath(fieldPath, "truncationImpact")),
|
|
1089
|
+
freshnessImpact: requiredBoolean(ctx, requiredField(ctx, obj, "freshnessImpact", joinFieldPath(fieldPath, "freshnessImpact")), joinFieldPath(fieldPath, "freshnessImpact"))
|
|
1090
|
+
};
|
|
1091
|
+
}
|
|
1092
|
+
function validateContextCapsuleArtifactRef(ctx, value, fieldPath) {
|
|
1093
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1094
|
+
return {
|
|
1095
|
+
name: requiredString(ctx, requiredField(ctx, obj, "name", joinFieldPath(fieldPath, "name")), joinFieldPath(fieldPath, "name")),
|
|
1096
|
+
path: requiredString(ctx, requiredField(ctx, obj, "path", joinFieldPath(fieldPath, "path")), joinFieldPath(fieldPath, "path"))
|
|
1097
|
+
};
|
|
1098
|
+
}
|
|
1099
|
+
function validateContextCapsuleIndex(ctx, value, fieldPath) {
|
|
1100
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1101
|
+
const result = {
|
|
1102
|
+
indexPath: requiredString(ctx, requiredField(ctx, obj, "indexPath", joinFieldPath(fieldPath, "indexPath")), joinFieldPath(fieldPath, "indexPath")),
|
|
1103
|
+
manifestPath: requiredString(ctx, requiredField(ctx, obj, "manifestPath", joinFieldPath(fieldPath, "manifestPath")), joinFieldPath(fieldPath, "manifestPath")),
|
|
1104
|
+
artifactRefs: requiredArray(ctx, requiredField(ctx, obj, "artifactRefs", joinFieldPath(fieldPath, "artifactRefs")), joinFieldPath(fieldPath, "artifactRefs")).map((item, i) => validateContextCapsuleArtifactRef(ctx, item, arrayFieldPath(joinFieldPath(fieldPath, "artifactRefs"), i)))
|
|
1105
|
+
};
|
|
1106
|
+
if (optionalField(obj, "manifestSchemaVersion") !== undefined)
|
|
1107
|
+
result.manifestSchemaVersion = optionalString(ctx, obj.manifestSchemaVersion, joinFieldPath(fieldPath, "manifestSchemaVersion"));
|
|
1108
|
+
if (optionalField(obj, "projectRoot") !== undefined)
|
|
1109
|
+
result.projectRoot = optionalString(ctx, obj.projectRoot, joinFieldPath(fieldPath, "projectRoot"));
|
|
1110
|
+
return result;
|
|
1111
|
+
}
|
|
1112
|
+
function validateContextCapsuleLimits(ctx, value, fieldPath) {
|
|
1113
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1114
|
+
return {
|
|
1115
|
+
maxCandidateFiles: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxCandidateFiles", joinFieldPath(fieldPath, "maxCandidateFiles")), joinFieldPath(fieldPath, "maxCandidateFiles")),
|
|
1116
|
+
maxSourceSlices: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxSourceSlices", joinFieldPath(fieldPath, "maxSourceSlices")), joinFieldPath(fieldPath, "maxSourceSlices")),
|
|
1117
|
+
maxGraphNodes: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxGraphNodes", joinFieldPath(fieldPath, "maxGraphNodes")), joinFieldPath(fieldPath, "maxGraphNodes")),
|
|
1118
|
+
maxGraphEdges: requiredNullableNumber(ctx, requiredField(ctx, obj, "maxGraphEdges", joinFieldPath(fieldPath, "maxGraphEdges")), joinFieldPath(fieldPath, "maxGraphEdges"))
|
|
1119
|
+
};
|
|
1120
|
+
}
|
|
1121
|
+
export function validateContextCapsuleRequest(ctx, value, fieldPath) {
|
|
1122
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1123
|
+
return {
|
|
1124
|
+
originalQuery: requiredString(ctx, requiredField(ctx, obj, "originalQuery", joinFieldPath(fieldPath, "originalQuery")), joinFieldPath(fieldPath, "originalQuery")),
|
|
1125
|
+
normalizedQuery: requiredString(ctx, requiredField(ctx, obj, "normalizedQuery", joinFieldPath(fieldPath, "normalizedQuery")), joinFieldPath(fieldPath, "normalizedQuery")),
|
|
1126
|
+
mode: requiredLiteral(ctx, requiredField(ctx, obj, "mode", joinFieldPath(fieldPath, "mode")), joinFieldPath(fieldPath, "mode"), CONTEXT_CAPSULE_MODES),
|
|
1127
|
+
requestedOutputPath: requiredString(ctx, requiredField(ctx, obj, "requestedOutputPath", joinFieldPath(fieldPath, "requestedOutputPath")), joinFieldPath(fieldPath, "requestedOutputPath")),
|
|
1128
|
+
role: validateContextRole(ctx, requiredField(ctx, obj, "role", joinFieldPath(fieldPath, "role")), joinFieldPath(fieldPath, "role")),
|
|
1129
|
+
requestFilePath: requiredNullableString(ctx, requiredField(ctx, obj, "requestFilePath", joinFieldPath(fieldPath, "requestFilePath")), joinFieldPath(fieldPath, "requestFilePath"))
|
|
1130
|
+
};
|
|
1131
|
+
}
|
|
1132
|
+
function validateContextCapsuleTool(ctx, value, fieldPath) {
|
|
1133
|
+
const obj = requiredObject(ctx, value, fieldPath);
|
|
1134
|
+
return {
|
|
1135
|
+
name: requiredString(ctx, requiredField(ctx, obj, "name", joinFieldPath(fieldPath, "name")), joinFieldPath(fieldPath, "name")),
|
|
1136
|
+
version: requiredString(ctx, requiredField(ctx, obj, "version", joinFieldPath(fieldPath, "version")), joinFieldPath(fieldPath, "version"))
|
|
1137
|
+
};
|
|
1138
|
+
}
|
|
1139
|
+
export function validateMyDevKitContextCapsuleV1(value, sourcePath) {
|
|
1140
|
+
const ctx = { artifactKind: ARTIFACT_KIND, sourcePath };
|
|
1141
|
+
try {
|
|
1142
|
+
const schemaVersionResult = parseSupportedMajorOneSchemaVersion(requiredField(ctx, value, "schemaVersion", "schemaVersion"), ARTIFACT_KIND, sourcePath);
|
|
1143
|
+
if ("ok" in schemaVersionResult)
|
|
1144
|
+
return schemaVersionResult;
|
|
1145
|
+
const capsule = {
|
|
1146
|
+
schemaVersion: requiredString(ctx, value.schemaVersion, "schemaVersion"),
|
|
1147
|
+
generatedAt: requiredString(ctx, requiredField(ctx, value, "generatedAt", "generatedAt"), "generatedAt"),
|
|
1148
|
+
tool: validateContextCapsuleTool(ctx, requiredField(ctx, value, "tool", "tool"), "tool"),
|
|
1149
|
+
request: validateContextCapsuleRequest(ctx, requiredField(ctx, value, "request", "request"), "request"),
|
|
1150
|
+
index: validateContextCapsuleIndex(ctx, requiredField(ctx, value, "index", "index"), "index"),
|
|
1151
|
+
limits: validateContextCapsuleLimits(ctx, requiredField(ctx, value, "limits", "limits"), "limits"),
|
|
1152
|
+
requiredContext: requiredArray(ctx, requiredField(ctx, value, "requiredContext", "requiredContext"), "requiredContext").map((item, i) => validateContextEntry(ctx, item, arrayFieldPath("requiredContext", i))),
|
|
1153
|
+
optionalSupportContext: requiredArray(ctx, requiredField(ctx, value, "optionalSupportContext", "optionalSupportContext"), "optionalSupportContext").map((item, i) => validateContextEntry(ctx, item, arrayFieldPath("optionalSupportContext", i))),
|
|
1154
|
+
droppedContext: requiredArray(ctx, requiredField(ctx, value, "droppedContext", "droppedContext"), "droppedContext").map((item, i) => validateDroppedContextEntry(ctx, item, arrayFieldPath("droppedContext", i))),
|
|
1155
|
+
warnings: requiredStringArray(ctx, requiredField(ctx, value, "warnings", "warnings"), "warnings"),
|
|
1156
|
+
contextAdequacy: validateContextAdequacyStatement(ctx, requiredField(ctx, value, "contextAdequacy", "contextAdequacy"), "contextAdequacy"),
|
|
1157
|
+
queryPlan: validateQueryPlan(ctx, requiredField(ctx, value, "queryPlan", "queryPlan"), "queryPlan"),
|
|
1158
|
+
candidateFiles: requiredArray(ctx, requiredField(ctx, value, "candidateFiles", "candidateFiles"), "candidateFiles").map((item, i) => validateCandidateFile(ctx, item, arrayFieldPath("candidateFiles", i))),
|
|
1159
|
+
candidateNodes: requiredArray(ctx, requiredField(ctx, value, "candidateNodes", "candidateNodes"), "candidateNodes").map((item, i) => validateCandidateNode(ctx, item, arrayFieldPath("candidateNodes", i))),
|
|
1160
|
+
focus: validateContextFocus(ctx, requiredField(ctx, value, "focus", "focus"), "focus"),
|
|
1161
|
+
selectedGraph: validateSelectedGraph(ctx, requiredField(ctx, value, "selectedGraph", "selectedGraph"), "selectedGraph"),
|
|
1162
|
+
retention: validateRetentionSummary(ctx, requiredField(ctx, value, "retention", "retention"), "retention"),
|
|
1163
|
+
selectedSource: validateSelectedSource(ctx, requiredField(ctx, value, "selectedSource", "selectedSource"), "selectedSource"),
|
|
1164
|
+
selectedSourceBundles: validateSelectedSourceBundles(ctx, requiredField(ctx, value, "selectedSourceBundles", "selectedSourceBundles"), "selectedSourceBundles"),
|
|
1165
|
+
semanticSummary: validateSemanticSummary(ctx, requiredField(ctx, value, "semanticSummary", "semanticSummary"), "semanticSummary"),
|
|
1166
|
+
classificationSummary: validateClassificationSummary(ctx, requiredField(ctx, value, "classificationSummary", "classificationSummary"), "classificationSummary"),
|
|
1167
|
+
artifactReferenceSummary: requiredArray(ctx, requiredField(ctx, value, "artifactReferenceSummary", "artifactReferenceSummary"), "artifactReferenceSummary").map((item, i) => validateArtifactReferenceSummaryEntry(ctx, item, arrayFieldPath("artifactReferenceSummary", i))),
|
|
1168
|
+
pruning: validatePruningSummary(ctx, requiredField(ctx, value, "pruning", "pruning"), "pruning"),
|
|
1169
|
+
conflicts: validateContextConflictSummary(ctx, requiredField(ctx, value, "conflicts", "conflicts"), "conflicts"),
|
|
1170
|
+
modeEffects: validateModeEffects(ctx, requiredField(ctx, value, "modeEffects", "modeEffects"), "modeEffects"),
|
|
1171
|
+
sourceControl: validateSourceControl(ctx, requiredField(ctx, value, "sourceControl", "sourceControl"), "sourceControl"),
|
|
1172
|
+
deferredRequestFields: requiredStringArray(ctx, requiredField(ctx, value, "deferredRequestFields", "deferredRequestFields"), "deferredRequestFields"),
|
|
1173
|
+
roleContext: validateRoleContextSummary(ctx, requiredField(ctx, value, "roleContext", "roleContext"), "roleContext"),
|
|
1174
|
+
evidenceGroups: requiredArray(ctx, requiredField(ctx, value, "evidenceGroups", "evidenceGroups"), "evidenceGroups").map((item, i) => validateEvidenceGroup(ctx, item, arrayFieldPath("evidenceGroups", i))),
|
|
1175
|
+
selectedOwners: requiredArray(ctx, requiredField(ctx, value, "selectedOwners", "selectedOwners"), "selectedOwners").map((item, i) => validateEvidenceItemRef(ctx, item, arrayFieldPath("selectedOwners", i))),
|
|
1176
|
+
selectedContracts: requiredArray(ctx, requiredField(ctx, value, "selectedContracts", "selectedContracts"), "selectedContracts").map((item, i) => validateEvidenceItemRef(ctx, item, arrayFieldPath("selectedContracts", i))),
|
|
1177
|
+
selectedTests: requiredArray(ctx, requiredField(ctx, value, "selectedTests", "selectedTests"), "selectedTests").map((item, i) => validateEvidenceItemRef(ctx, item, arrayFieldPath("selectedTests", i))),
|
|
1178
|
+
testInfrastructure: validateTestInfrastructureSummary(ctx, requiredField(ctx, value, "testInfrastructure", "testInfrastructure"), "testInfrastructure"),
|
|
1179
|
+
unresolvedItems: requiredArray(ctx, requiredField(ctx, value, "unresolvedItems", "unresolvedItems"), "unresolvedItems").map((item, i) => validateUnresolvedEvidenceItem(ctx, item, arrayFieldPath("unresolvedItems", i))),
|
|
1180
|
+
groupTruncation: requiredArray(ctx, requiredField(ctx, value, "groupTruncation", "groupTruncation"), "groupTruncation").map((item, i) => validateGroupTruncationEntry(ctx, item, arrayFieldPath("groupTruncation", i))),
|
|
1181
|
+
responsibilityMappings: validateResponsibilityMappingSummary(ctx, requiredField(ctx, value, "responsibilityMappings", "responsibilityMappings"), "responsibilityMappings"),
|
|
1182
|
+
roleAdequacy: validateRoleAdequacyStatement(ctx, requiredField(ctx, value, "roleAdequacy", "roleAdequacy"), "roleAdequacy"),
|
|
1183
|
+
freshness: validateFreshnessSummary(ctx, requiredField(ctx, value, "freshness", "freshness"), "freshness"),
|
|
1184
|
+
budget: validateBudgetSummary(ctx, requiredField(ctx, value, "budget", "budget"), "budget"),
|
|
1185
|
+
truncation: validateTruncationSummary(ctx, requiredField(ctx, value, "truncation", "truncation"), "truncation"),
|
|
1186
|
+
fullFileFallback: validateFullFileFallbackSummary(ctx, requiredField(ctx, value, "fullFileFallback", "fullFileFallback"), "fullFileFallback"),
|
|
1187
|
+
provenance: requiredArray(ctx, requiredField(ctx, value, "provenance", "provenance"), "provenance").map((item, i) => validateProvenanceRecord(ctx, item, arrayFieldPath("provenance", i)))
|
|
1188
|
+
};
|
|
1189
|
+
// Kit artifact writers do not generically reject duplicate IDs (report section 27); the
|
|
1190
|
+
// capsule reconstruction above exists only to walk and type-check every field. The
|
|
1191
|
+
// returned artifact must be the original parsed reference, never a rebuilt object.
|
|
1192
|
+
void capsule;
|
|
1193
|
+
return {
|
|
1194
|
+
ok: true,
|
|
1195
|
+
artifactKind: ARTIFACT_KIND,
|
|
1196
|
+
sourcePath,
|
|
1197
|
+
schemaVersion: value.schemaVersion,
|
|
1198
|
+
schemaMajor: 1,
|
|
1199
|
+
artifact: value,
|
|
1200
|
+
rawArtifact: value
|
|
1201
|
+
};
|
|
1202
|
+
}
|
|
1203
|
+
catch (error) {
|
|
1204
|
+
if (error instanceof ArtifactValidationError)
|
|
1205
|
+
return error.failure;
|
|
1206
|
+
throw error;
|
|
1207
|
+
}
|
|
1208
|
+
}
|