search and ai stabilization work, localization stablized.

This commit is contained in:
master
2026-02-24 23:29:36 +02:00
parent 4f947a8b61
commit b07d27772e
766 changed files with 55299 additions and 3221 deletions

View File

@@ -0,0 +1,9 @@
{
"_meta": { "locale": "de-DE", "namespace": "scanner", "version": "1.0" },
"scanner.slice.scan_id_required": "scanId ist erforderlich",
"scanner.slice.cve_or_symbols_required": "Entweder cveId oder symbols muss angegeben werden",
"scanner.slice.digest_required": "digest ist erforderlich",
"scanner.slice.slice_digest_required": "sliceDigest ist erforderlich",
"scanner.slice.not_found": "Slice {digest} wurde nicht gefunden"
}

View File

@@ -0,0 +1,362 @@
{
"_meta": { "locale": "en-US", "namespace": "scanner", "version": "1.0" },
"scanner.error.invalid_tenant": "Invalid tenant context",
"scanner.slice.scan_id_required": "scanId is required",
"scanner.slice.cve_or_symbols_required": "Either cveId or symbols must be specified",
"scanner.slice.digest_required": "digest is required",
"scanner.slice.slice_digest_required": "sliceDigest is required",
"scanner.slice.not_found": "Slice {digest} not found",
"scanner.scan.invalid_submission": "Invalid scan submission",
"scanner.scan.image_descriptor_required": "Request image descriptor is required.",
"scanner.scan.image_ref_or_digest_required": "Either image.reference or image.digest must be provided.",
"scanner.scan.image_digest_prefix_required": "Image digest must include algorithm prefix (e.g. sha256:...).",
"scanner.scan.invalid_identifier": "Invalid scan identifier",
"scanner.scan.identifier_required": "Scan identifier is required.",
"scanner.scan.not_found": "Scan not found",
"scanner.scan.not_found_detail": "Requested scan could not be located.",
"scanner.scan.entropy_layers_required": "Entropy layers are required",
"scanner.scan.entrytrace_not_found": "EntryTrace not found",
"scanner.scan.entrytrace_not_found_detail": "EntryTrace data is not available for the requested scan.",
"scanner.scan.ruby_packages_not_found": "Ruby packages not found",
"scanner.scan.ruby_packages_not_found_detail": "Ruby package inventory is not available for the requested scan.",
"scanner.scan.bun_packages_not_found": "Bun packages not found",
"scanner.scan.bun_packages_not_found_detail": "Bun package inventory is not available for the requested scan.",
"scanner.sbom.invalid_json": "Invalid JSON",
"scanner.sbom.invalid_json_detail": "Request body must be valid JSON.",
"scanner.sbom.unknown_format": "Unknown SBOM format",
"scanner.sbom.unknown_format_detail": "Unable to determine SBOM format. Provide Content-Type or use a supported format.",
"scanner.sbom.invalid": "Invalid SBOM",
"scanner.sbom.invalid_detail": "The SBOM document failed validation.",
"scanner.sbom.invalid_identifier": "Invalid SBOM identifier",
"scanner.sbom.upload_not_found": "SBOM upload not found",
"scanner.sbom.no_data_available": "No SBOM data available",
"scanner.sbom.no_data_available_detail": "No SBOM data is available for the requested scan.",
"scanner.sbom.no_sarif_findings": "No findings available",
"scanner.sbom.no_sarif_findings_detail": "No findings are available to export as SARIF for this scan.",
"scanner.sbom.no_cdx_findings": "No findings available",
"scanner.sbom.no_cdx_findings_detail": "No findings are available to export as CycloneDX for this scan.",
"scanner.sbom.no_vex_data": "No VEX data available",
"scanner.sbom.no_vex_data_detail": "No VEX data is available for the requested scan.",
"scanner.sbom.validate_description": "Validates an SBOM document against CycloneDX or SPDX schemas",
"scanner.sbom.validators_description": "Gets information about available SBOM validators",
"scanner.sbom.empty_body": "Empty request body",
"scanner.sbom.empty_body_detail": "SBOM document is required",
"scanner.sbom.invalid_format": "Invalid format",
"scanner.sbom.validator_unavailable": "Validator unavailable",
"scanner.sbom_hot_lookup.invalid_digest": "Invalid payload digest",
"scanner.sbom_hot_lookup.invalid_digest_detail": "Payload digest is required.",
"scanner.sbom_hot_lookup.no_projection": "No SBOM projection found",
"scanner.sbom_hot_lookup.no_projection_detail": "No SBOM projection found for the given digest.",
"scanner.sbom_hot_lookup.invalid_component_query": "Invalid component query",
"scanner.sbom_hot_lookup.invalid_component_query_detail": "At least one query parameter is required.",
"scanner.sbom_hot_lookup.ambiguous_query": "Ambiguous component query",
"scanner.sbom_hot_lookup.ambiguous_query_detail": "Query matches multiple components. Refine your query.",
"scanner.sbom_hot_lookup.invalid_limit": "Invalid limit",
"scanner.sbom_hot_lookup.invalid_limit_detail": "limit must be between 1 and 1000.",
"scanner.sbom_hot_lookup.invalid_offset": "Invalid offset",
"scanner.sbom_hot_lookup.invalid_offset_detail": "offset must be >= 0.",
"scanner.evidence.finding_detail_description": "Retrieves unified evidence for a specific finding within a scan.",
"scanner.evidence.list_description": "Lists all findings with evidence for a scan.",
"scanner.evidence.invalid_finding_id": "Invalid finding identifier",
"scanner.evidence.invalid_finding_id_detail": "Finding identifier is required.",
"scanner.evidence.finding_not_found": "Finding not found",
"scanner.evidence.finding_not_found_detail": "Requested finding could not be located.",
"scanner.reachability.computation_in_progress": "Computation already in progress",
"scanner.reachability.computation_in_progress_detail": "Reachability computation already running for scan {scanId}.",
"scanner.reachability.missing_parameters": "Missing required parameters",
"scanner.reachability.missing_parameters_detail": "Either purl or cveId must be provided.",
"scanner.reachability.explanation_not_found": "Explanation not found",
"scanner.reachability.explanation_not_found_detail": "No reachability data for CVE {cve} and PURL {purl}.",
"scanner.reachability.trace_not_available": "Trace export not available",
"scanner.reachability.trace_not_available_detail": "Trace export is not supported for this scan.",
"scanner.reachability.stack_not_available": "Reachability stack not available",
"scanner.reachability.stack_not_available_detail": "Reachability stack analysis is not yet implemented.",
"scanner.reachability.stack_not_found": "Reachability stack not found",
"scanner.reachability.stack_not_found_detail": "Reachability stack not found for finding {findingId}.",
"scanner.reachability.invalid_layer": "Invalid layer number",
"scanner.reachability.invalid_layer_detail": "Layer number must be a positive integer.",
"scanner.approval.create_description": "Creates a human approval attestation for a finding.",
"scanner.approval.list_description": "Lists all active approvals for a scan.",
"scanner.approval.get_description": "Gets an approval for a specific finding.",
"scanner.approval.revoke_description": "Revokes an existing approval.",
"scanner.approval.body_required": "Request body is required",
"scanner.approval.body_required_detail": "Request body is required.",
"scanner.approval.finding_id_required": "FindingId is required",
"scanner.approval.finding_id_required_detail": "FindingId must be provided.",
"scanner.approval.justification_required": "Justification is required",
"scanner.approval.justification_required_detail": "Justification must be provided.",
"scanner.approval.approver_unidentified": "Unable to identify approver",
"scanner.approval.approver_unidentified_detail": "Could not determine approver identity.",
"scanner.approval.invalid_decision": "Invalid decision value",
"scanner.approval.invalid_decision_detail": "Decision value '{decision}' is not valid.",
"scanner.approval.create_failed": "Failed to create approval",
"scanner.approval.create_failed_detail": "The approval could not be created.",
"scanner.approval.not_found": "Approval not found",
"scanner.approval.not_found_detail": "No approval found for finding '{findingId}'.",
"scanner.approval.revoker_unidentified": "Unable to identify revoker",
"scanner.approval.revoker_unidentified_detail": "Could not determine revoker identity.",
"scanner.baseline.recommendations_description": "Get recommended baselines for an artifact with rationale.",
"scanner.baseline.rationale_description": "Get detailed rationale for a baseline selection.",
"scanner.baseline.invalid_digest": "Invalid artifact digest",
"scanner.baseline.digest_required": "Artifact digest is required.",
"scanner.baseline.invalid_base_digest": "Invalid base digest",
"scanner.baseline.base_digest_required": "Base digest is required.",
"scanner.baseline.invalid_head_digest": "Invalid head digest",
"scanner.baseline.head_digest_required": "Head digest is required.",
"scanner.baseline.not_found": "Baseline not found",
"scanner.baseline.not_found_detail": "Baseline not found for artifact '{digest}'.",
"scanner.manifest.get_description": "Get the scan manifest, optionally with DSSE signature",
"scanner.manifest.list_proofs_description": "List all proof bundles for a scan",
"scanner.manifest.get_proof_description": "Get a specific proof bundle by root hash",
"scanner.manifest.not_found": "Manifest not found",
"scanner.manifest.not_found_detail": "Manifest not found for scan '{scanId}'.",
"scanner.manifest.proof_not_found": "Proof bundle not found",
"scanner.manifest.proof_not_found_detail": "Proof bundle not found for root hash '{rootHash}'.",
"scanner.manifest.invalid_root_hash": "Invalid root hash",
"scanner.manifest.root_hash_required": "Root hash is required.",
"scanner.policy.invalid_diagnostics_request": "Invalid policy diagnostics request",
"scanner.policy.invalid_preview_request": "Invalid policy preview request",
"scanner.policy.invalid_runtime_request": "Invalid runtime policy request",
"scanner.policy.invalid_linkset_request": "Invalid linkset request",
"scanner.policy.invalid_overlay_request": "Invalid policy overlay request",
"scanner.export.no_findings": "No findings available",
"scanner.export.no_findings_detail": "No findings are available to export for this scan.",
"scanner.export.no_sbom": "No SBOM data available",
"scanner.export.no_sbom_detail": "No SBOM data is available for the requested scan.",
"scanner.export.no_vex": "No VEX data available",
"scanner.export.no_vex_detail": "No VEX data is available for the requested scan.",
"scanner.layer_sbom.invalid_digest": "Invalid layer digest",
"scanner.layer_sbom.invalid_digest_detail": "Layer digest is required.",
"scanner.layer_sbom.not_found": "Layer SBOM not found",
"scanner.layer_sbom.not_found_detail": "Layer SBOM not found for digest '{digest}'.",
"scanner.layer_sbom.recipe_not_found": "Composition recipe not found",
"scanner.layer_sbom.recipe_not_found_detail": "Composition recipe not found for the requested scan.",
"scanner.callgraph.missing_content_digest": "Missing Content-Digest header",
"scanner.callgraph.missing_content_digest_detail": "Content-Digest header is required for idempotent call graph submission.",
"scanner.callgraph.invalid": "Invalid call graph",
"scanner.callgraph.invalid_detail": "Call graph validation failed.",
"scanner.callgraph.duplicate": "Duplicate call graph",
"scanner.callgraph.duplicate_detail": "Call graph with this Content-Digest already submitted.",
"scanner.runtime.invalid_ingest": "Invalid runtime ingest request",
"scanner.runtime.batch_too_large": "Runtime event batch too large",
"scanner.runtime.rate_limited": "Runtime ingestion rate limited",
"scanner.runtime.unsupported_schema": "Unsupported runtime schema version",
"scanner.runtime.invalid_reconciliation": "Invalid reconciliation request",
"scanner.runtime.description": "Compares libraries observed at runtime against the static SBOM to identify discrepancies",
"scanner.report.invalid_request": "Invalid report request",
"scanner.report.assembly_failed": "Unable to assemble report",
"scanner.report.assembly_failed_detail": "The report could not be assembled.",
"scanner.sources.tenant_required": "Tenant context required",
"scanner.sources.tenant_required_detail": "A valid tenant context is required for this operation.",
"scanner.sources.not_found": "Source not found",
"scanner.sources.not_found_by_id_detail": "Source {sourceId} not found",
"scanner.sources.not_found_by_name_detail": "Source '{name}' not found",
"scanner.sources.already_exists": "Source already exists",
"scanner.sources.already_exists_detail": "A source with this name already exists.",
"scanner.sources.invalid_request": "Invalid request",
"scanner.sources.update_conflict": "Update conflict",
"scanner.sources.update_conflict_detail": "The source has been modified since it was last read.",
"scanner.sources.run_not_found": "Run not found",
"scanner.sources.run_not_found_detail": "The requested run could not be located.",
"scanner.sources.cannot_trigger": "Cannot trigger scan",
"scanner.sources.cannot_trigger_detail": "Unable to trigger a scan for the requested source.",
"scanner.actionables.description": "Get actionable recommendations for a delta comparison.",
"scanner.actionables.by_priority_description": "Get actionables filtered by priority level.",
"scanner.actionables.by_type_description": "Get actionables filtered by action type.",
"scanner.actionables.invalid_delta_id": "Invalid delta ID",
"scanner.actionables.delta_id_required": "Delta ID is required.",
"scanner.actionables.delta_not_found": "Delta not found",
"scanner.actionables.delta_not_found_detail": "Delta '{deltaId}' not found.",
"scanner.actionables.invalid_priority": "Invalid priority",
"scanner.actionables.invalid_priority_detail": "Priority '{priority}' is not valid.",
"scanner.actionables.invalid_type": "Invalid type",
"scanner.actionables.invalid_type_detail": "Type '{type}' is not valid.",
"scanner.counterfactual.compute_description": "Compute counterfactual paths for a blocked finding.",
"scanner.counterfactual.get_description": "Get computed counterfactuals for a specific finding.",
"scanner.counterfactual.summary_description": "Get counterfactual summary for all blocked findings in a scan.",
"scanner.counterfactual.invalid_finding_id": "Invalid finding ID",
"scanner.counterfactual.finding_id_required": "Finding ID is required.",
"scanner.counterfactual.not_found": "Counterfactuals not found",
"scanner.counterfactual.not_found_detail": "Counterfactuals not found for finding '{findingId}'.",
"scanner.counterfactual.invalid_scan_id": "Invalid scan ID",
"scanner.counterfactual.scan_id_required": "Scan ID is required.",
"scanner.counterfactual.scan_not_found": "Scan not found",
"scanner.counterfactual.scan_not_found_detail": "Scan '{scanId}' not found.",
"scanner.delta.compare_description": "Compares two scan snapshots and returns detailed delta.",
"scanner.delta.quick_diff_description": "Returns quick diff summary for Can I Ship header.",
"scanner.delta.get_cached_description": "Retrieves a cached comparison result by ID.",
"scanner.delta.invalid_base_digest": "Invalid base digest",
"scanner.delta.base_digest_required": "Base digest is required.",
"scanner.delta.invalid_target_digest": "Invalid target digest",
"scanner.delta.target_digest_required": "Target digest is required.",
"scanner.delta.invalid_comparison_id": "Invalid comparison ID",
"scanner.delta.comparison_id_required": "Comparison ID is required.",
"scanner.delta.comparison_not_found": "Comparison not found",
"scanner.delta.comparison_not_found_detail": "Comparison '{comparisonId}' not found.",
"scanner.delta_evidence.invalid_identifiers": "Invalid identifiers",
"scanner.delta_evidence.identifiers_required": "Both comparison ID and finding ID are required.",
"scanner.delta_evidence.finding_not_found": "Finding not found",
"scanner.delta_evidence.finding_not_found_detail": "Finding not found for comparison '{comparisonId}'.",
"scanner.delta_evidence.proof_not_found": "Proof bundle not found",
"scanner.delta_evidence.proof_not_found_detail": "Proof bundle not found for finding '{findingId}'.",
"scanner.delta_evidence.attestations_not_found": "Attestations not found",
"scanner.delta_evidence.attestations_not_found_detail": "Attestations not found for finding '{findingId}'.",
"scanner.github.owner_repo_required": "Owner and repo are required",
"scanner.github.owner_repo_required_detail": "Both owner and repo must be provided.",
"scanner.github.no_findings": "No findings to export",
"scanner.github.no_findings_detail": "No findings available to export as SARIF.",
"scanner.github.sarif_not_found": "SARIF upload not found",
"scanner.github.sarif_not_found_detail": "The requested SARIF upload could not be found.",
"scanner.github.alert_not_found": "Alert not found",
"scanner.github.alert_not_found_detail": "The requested alert could not be found.",
"scanner.triage.proof_bundle_description": "Generates an attested proof bundle for an exploit path.",
"scanner.triage.inbox_description": "Retrieves triage inbox with grouped exploit paths for an artifact.",
"scanner.triage.finding_status_description": "Retrieves triage status for a specific finding.",
"scanner.triage.update_status_description": "Updates triage status for a finding (lane change, decision).",
"scanner.triage.submit_vex_description": "Submits a VEX statement for a finding.",
"scanner.triage.query_description": "Queries findings with filtering and pagination.",
"scanner.triage.summary_description": "Returns triage summary statistics for an artifact.",
"scanner.triage.cluster_stats_description": "Returns per-cluster severity and reachability distributions.",
"scanner.triage.cluster_action_description": "Applies one triage action to all findings in an exploit-path cluster.",
"scanner.triage.invalid_path_id": "Invalid path ID",
"scanner.triage.path_id_required": "Path ID is required.",
"scanner.triage.invalid_artifact_digest": "Invalid artifact digest",
"scanner.triage.artifact_digest_required": "Artifact digest is required.",
"scanner.triage.invalid_finding_id": "Invalid finding ID",
"scanner.triage.finding_id_required": "Finding ID is required.",
"scanner.triage.finding_not_found": "Finding not found",
"scanner.triage.finding_not_found_detail": "Finding with ID '{findingId}' was not found.",
"scanner.triage.invalid_vex_status": "Invalid VEX status",
"scanner.triage.vex_status_required": "VEX status is required.",
"scanner.triage.vex_status_invalid_detail": "VEX status must be one of: Affected, NotAffected, UnderInvestigation, Unknown",
"scanner.triage.justification_required": "Justification required",
"scanner.triage.justification_required_detail": "Justification is required when status is NotAffected.",
"scanner.triage.invalid_path_id_batch": "Invalid path id",
"scanner.triage.path_id_batch_required": "Path id is required.",
"scanner.triage.cluster_not_found": "Cluster not found",
"scanner.triage.cluster_not_found_detail": "Cluster '{pathId}' was not found for artifact '{artifactDigest}'.",
"scanner.score_replay.invalid_scan_id": "Invalid scan ID",
"scanner.score_replay.scan_id_required": "Scan ID is required",
"scanner.score_replay.scan_not_found": "Scan not found",
"scanner.score_replay.scan_not_found_detail": "No scan found with ID: {scanId}",
"scanner.score_replay.bundle_not_found": "Bundle not found",
"scanner.score_replay.bundle_not_found_detail": "No proof bundle found for scan: {scanId}",
"scanner.score_replay.replay_failed": "Replay failed",
"scanner.score_replay.missing_root_hash": "Missing expected root hash",
"scanner.score_replay.root_hash_required": "Expected root hash is required for verification",
"scanner.score_replay.replay_description": "Replay scoring for a previous scan using frozen inputs",
"scanner.score_replay.bundle_description": "Get the proof bundle for a scan",
"scanner.score_replay.verify_description": "Verify a proof bundle against expected root hash",
"scanner.epss.invalid_request": "Invalid request",
"scanner.epss.cve_ids_required": "At least one CVE ID is required.",
"scanner.epss.batch_size_exceeded": "Batch size exceeded",
"scanner.epss.batch_size_detail": "Maximum batch size is 1000 CVE IDs.",
"scanner.epss.data_unavailable": "EPSS data is not available. Please ensure EPSS data has been ingested.",
"scanner.epss.invalid_cve_id": "Invalid CVE ID",
"scanner.epss.cve_id_required": "CVE ID is required.",
"scanner.epss.cve_not_found": "CVE not found",
"scanner.epss.cve_not_found_detail": "No EPSS score found for {cveId}.",
"scanner.epss.invalid_date_format": "Invalid date format",
"scanner.epss.date_format_detail": "Dates must be in yyyy-MM-dd format.",
"scanner.epss.no_history": "No history found",
"scanner.epss.no_history_detail": "No EPSS history found for {cveId} in the specified date range.",
"scanner.webhook.invalid_tenant": "Invalid tenant context",
"scanner.webhook.source_not_found": "Source not found",
"scanner.webhook.source_no_webhooks": "Source does not support webhooks",
"scanner.webhook.secret_not_configured": "Webhook secret is not configured",
"scanner.webhook.missing_signature": "Missing webhook signature",
"scanner.webhook.resolve_secret_failed": "Failed to resolve webhook secret",
"scanner.webhook.invalid_signature": "Invalid webhook signature",
"scanner.webhook.invalid_json_payload": "Invalid JSON payload",
"scanner.webhook.processing_failed": "Webhook processing failed",
"scanner.unknowns.list_description": "Lists unknown entries with tenant-scoped filtering.",
"scanner.unknowns.stats_description": "Returns tenant-scoped unknown summary statistics.",
"scanner.unknowns.bands_description": "Returns tenant-scoped unknown distribution by triage band.",
"scanner.unknowns.evidence_description": "Returns tenant-scoped unknown evidence metadata.",
"scanner.unknowns.history_description": "Returns tenant-scoped unknown history.",
"scanner.unknowns.get_description": "Returns tenant-scoped unknown detail.",
"scanner.unknowns.invalid_band": "Invalid band",
"scanner.unknowns.band_detail": "Band must be one of HOT, WARM, or COLD.",
"scanner.secret_settings.get_description": "Get secret detection settings for a tenant.",
"scanner.secret_settings.create_description": "Create default secret detection settings for a tenant.",
"scanner.secret_settings.update_description": "Update secret detection settings for a tenant.",
"scanner.secret_settings.list_exceptions_description": "List secret exception patterns for a tenant.",
"scanner.secret_settings.get_exception_description": "Get a specific secret exception pattern.",
"scanner.secret_settings.create_exception_description": "Create a new secret exception pattern.",
"scanner.secret_settings.update_exception_description": "Update a secret exception pattern.",
"scanner.secret_settings.delete_exception_description": "Delete a secret exception pattern.",
"scanner.secret_settings.get_categories_description": "Get available secret detection rule categories.",
"scanner.secret_settings.not_found": "Settings not found",
"scanner.secret_settings.not_found_detail": "No secret detection settings found for tenant '{tenantId}'.",
"scanner.secret_settings.already_exist": "Settings already exist",
"scanner.secret_settings.already_exist_detail": "Secret detection settings already exist for tenant '{tenantId}'.",
"scanner.secret_settings.version_conflict": "Version conflict",
"scanner.secret_settings.validation_failed": "Validation failed",
"scanner.secret_settings.exception_not_found": "Exception pattern not found",
"scanner.secret_settings.exception_not_found_detail": "No exception pattern found with ID '{exceptionId}'.",
"scanner.offline_kit.not_enabled": "Offline kit import is not enabled",
"scanner.offline_kit.status_not_enabled": "Offline kit status is not enabled",
"scanner.offline_kit.manifest_not_enabled": "Offline kit is not enabled",
"scanner.offline_kit.validate_not_enabled": "Offline kit validation is not enabled",
"scanner.offline_kit.invalid_import": "Invalid offline kit import request",
"scanner.offline_kit.multipart_required": "Request must be multipart/form-data.",
"scanner.offline_kit.metadata_field_missing": "Missing 'metadata' form field.",
"scanner.offline_kit.metadata_empty": "Metadata payload is empty.",
"scanner.offline_kit.bundle_field_missing": "Missing 'bundle' file upload.",
"scanner.offline_kit.import_failed": "Offline kit import failed",
"scanner.offline_kit.invalid_validation_request": "Invalid validation request",
"scanner.offline_kit.manifest_required": "Request body with manifestJson is required.",
"scanner.drift.invalid_identifier": "Invalid drift identifier",
"scanner.drift.identifier_detail": "driftId must be a non-empty GUID.",
"scanner.drift.invalid_direction": "Invalid direction",
"scanner.drift.direction_detail": "direction must be 'became_reachable' or 'became_unreachable'.",
"scanner.drift.invalid_offset": "Invalid offset",
"scanner.drift.offset_detail": "offset must be >= 0.",
"scanner.drift.invalid_limit": "Invalid limit",
"scanner.drift.limit_detail": "limit must be between 1 and 500.",
"scanner.drift.result_not_found": "Drift result not found",
"scanner.drift.result_not_found_detail": "Requested drift result could not be located.",
"scanner.drift.no_cached_result_detail": "No reachability drift result recorded for scan {scanId} (language={language}).",
"scanner.drift.invalid_base_scan": "Invalid base scan identifier",
"scanner.drift.base_scan_detail": "Query parameter 'baseScanId' must be a valid scan id.",
"scanner.drift.base_scan_not_found": "Base scan not found",
"scanner.drift.base_scan_not_found_detail": "Base scan could not be located.",
"scanner.drift.base_graph_not_found": "Base call graph not found",
"scanner.drift.base_graph_not_found_detail": "No call graph snapshot found for base scan {scanId} (language={language}).",
"scanner.drift.head_graph_not_found": "Head call graph not found",
"scanner.drift.head_graph_not_found_detail": "No call graph snapshot found for head scan {scanId} (language={language}).",
"scanner.drift.invalid_request": "Invalid drift request",
"scanner.fidelity.analyze_description": "Analyze with specified fidelity level",
"scanner.fidelity.upgrade_description": "Upgrade analysis fidelity for a finding"
}