diff --git a/.gitignore b/.gitignore index 7dfb42d..6137ea2 100644 --- a/.gitignore +++ b/.gitignore @@ -56,6 +56,9 @@ tools/* !tools/ci/** tools/ci/checks/**/bin/ tools/ci/checks/**/obj/ +!tools/lang_switch/ +!tools/lang_switch/update_lang_headers.py +tools/lang_switch/__pycache__/ !tools/versioning/ !tools/versioning/check-versioning.sh !tools/versioning/labels.json diff --git a/docs/001_INDEX_CORE.MD b/docs/001_INDEX_CORE.MD index 88c14b9..c530f4a 100644 --- a/docs/001_INDEX_CORE.MD +++ b/docs/001_INDEX_CORE.MD @@ -1,3 +1,7 @@ + +[DE](001_INDEX_CORE.MD) | [EN](101_INDEX_CORE.MD) + + # Dokumentationsindex ## 1. Zweck diff --git a/docs/010_API_CORE.MD b/docs/010_API_CORE.MD index 1f0b503..7eed4ee 100644 --- a/docs/010_API_CORE.MD +++ b/docs/010_API_CORE.MD @@ -1,3 +1,7 @@ + +[DE](010_API_CORE.MD) | [EN](110_API_CORE.MD) + + # 01 - Funktionen ## 1. Zweck & Scope diff --git a/docs/020_ARCH_CORE.MD b/docs/020_ARCH_CORE.MD index 13c8d91..f6aa05f 100644 --- a/docs/020_ARCH_CORE.MD +++ b/docs/020_ARCH_CORE.MD @@ -1,3 +1,7 @@ + +[DE](020_ARCH_CORE.MD) | [EN](120_ARCH_CORE.MD) + + # 02 - Gesamtarchitektur und Ablaufflüsse ## 1. Zweck und Scope diff --git a/docs/021_USAGE_NUGET.MD b/docs/021_USAGE_NUGET.MD index c7be996..965eff0 100644 --- a/docs/021_USAGE_NUGET.MD +++ b/docs/021_USAGE_NUGET.MD @@ -1,3 +1,7 @@ + +[DE](021_USAGE_NUGET.MD) | [EN](121_USAGE_NUGET.MD) + + # NuGet Nutzung ## A) Zweck diff --git a/docs/101_INDEX_CORE.MD b/docs/101_INDEX_CORE.MD index e0df83c..e5a9b38 100644 --- a/docs/101_INDEX_CORE.MD +++ b/docs/101_INDEX_CORE.MD @@ -1,3 +1,7 @@ + +[DE](001_INDEX_CORE.MD) | [EN](101_INDEX_CORE.MD) + + # Documentation Index ## 1. Purpose diff --git a/docs/110_API_CORE.MD b/docs/110_API_CORE.MD index bf47890..5184958 100644 --- a/docs/110_API_CORE.MD +++ b/docs/110_API_CORE.MD @@ -1,3 +1,7 @@ + +[DE](010_API_CORE.MD) | [EN](110_API_CORE.MD) + + # 01 - API Functions ## 1. Purpose & Scope diff --git a/docs/120_ARCH_CORE.MD b/docs/120_ARCH_CORE.MD index 2823204..e915bce 100644 --- a/docs/120_ARCH_CORE.MD +++ b/docs/120_ARCH_CORE.MD @@ -1,3 +1,7 @@ + +[DE](020_ARCH_CORE.MD) | [EN](120_ARCH_CORE.MD) + + # 02 - Overall Architecture and Execution Flows ## 1. Purpose and Scope diff --git a/docs/121_USAGE_NUGET.MD b/docs/121_USAGE_NUGET.MD index 355e24a..988d266 100644 --- a/docs/121_USAGE_NUGET.MD +++ b/docs/121_USAGE_NUGET.MD @@ -1,3 +1,7 @@ + +[DE](021_USAGE_NUGET.MD) | [EN](121_USAGE_NUGET.MD) + + # NuGet Usage ## A) Purpose diff --git a/docs/audit/000_HASHING_BASELINE.MD b/docs/audit/000_HASHING_BASELINE.MD index ca45852..1290c25 100644 --- a/docs/audit/000_HASHING_BASELINE.MD +++ b/docs/audit/000_HASHING_BASELINE.MD @@ -1,3 +1,7 @@ + +[DE](000_HASHING_BASELINE.MD) | [EN](100_HASHING_BASELINE.MD) + + # Hashing-Baseline Evidence (Historischer Snapshot: vor EvidenceHashing-Rename) Erfasst am: 2026-02-10 diff --git a/docs/audit/000_INDEX.MD b/docs/audit/000_INDEX.MD index 107aced..2494d73 100644 --- a/docs/audit/000_INDEX.MD +++ b/docs/audit/000_INDEX.MD @@ -1,3 +1,7 @@ + +[DE](000_INDEX.MD) | [EN](100_INDEX.MD) + + # Audit-Index ## Zweck und Scope diff --git a/docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD b/docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD index f0c6c1b..e2c5684 100644 --- a/docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD +++ b/docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD @@ -1,3 +1,7 @@ + +[DE](002_AUDIT_CONTRACT_AND_GUARDRAILS.MD) | [EN](102_AUDIT_CONTRACT_AND_GUARDRAILS.MD) + + # Audit-Vertrag und Guardrails ## 1. Zweck diff --git a/docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD b/docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD index bcd0efb..ddfff74 100644 --- a/docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD +++ b/docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD @@ -1,3 +1,7 @@ + +[DE](003_SECURITY_ASSERTION_TRACEABILITY.MD) | [EN](103_SECURITY_ASSERTION_TRACEABILITY.MD) + + # Traceability: Security-Claims (SECURITY.md) ## Zweck und Scope diff --git a/docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD b/docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD index 4c1d983..8127f22 100644 --- a/docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD +++ b/docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD @@ -1,3 +1,7 @@ + +[DE](004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD) | [EN](104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD) + + # Roadmap: Zertifizierung und Attestationen ## 1. Positionierung diff --git a/docs/audit/005_CODE_ANALYSIS_METHOD.MD b/docs/audit/005_CODE_ANALYSIS_METHOD.MD index 3203bae..76e84a5 100644 --- a/docs/audit/005_CODE_ANALYSIS_METHOD.MD +++ b/docs/audit/005_CODE_ANALYSIS_METHOD.MD @@ -1,3 +1,7 @@ + +[DE](005_CODE_ANALYSIS_METHOD.MD) | [EN](105_CODE_ANALYSIS_METHOD.MD) + + # Code-Analyse-Methode ## 1. Ziel diff --git a/docs/audit/006_CODE_REVIEW_FINDINGS.MD b/docs/audit/006_CODE_REVIEW_FINDINGS.MD index 73bda3f..f3741e4 100644 --- a/docs/audit/006_CODE_REVIEW_FINDINGS.MD +++ b/docs/audit/006_CODE_REVIEW_FINDINGS.MD @@ -1,3 +1,7 @@ + +[DE](006_CODE_REVIEW_FINDINGS.MD) | [EN](106_CODE_REVIEW_FINDINGS.MD) + + # Code-Review Findings ## Zweck und Scope diff --git a/docs/audit/007_THREAT_MODEL.MD b/docs/audit/007_THREAT_MODEL.MD index 88d2e06..928a29b 100644 --- a/docs/audit/007_THREAT_MODEL.MD +++ b/docs/audit/007_THREAT_MODEL.MD @@ -1,3 +1,7 @@ + +[DE](007_THREAT_MODEL.MD) | [EN](107_THREAT_MODEL.MD) + + # Threat Model ## 1. Zweck und Scope diff --git a/docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD b/docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD index 25f3b39..b8335b0 100644 --- a/docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD +++ b/docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD @@ -1,3 +1,7 @@ + +[DE](008_INCIDENT_RESPONSE_RUNBOOK.MD) | [EN](108_INCIDENT_RESPONSE_RUNBOOK.MD) + + # Incident-Response-Runbook ## 1. Trigger Events diff --git a/docs/audit/009_SUPPLY_CHAIN_BASELINE.MD b/docs/audit/009_SUPPLY_CHAIN_BASELINE.MD index 1b74316..86bfa56 100644 --- a/docs/audit/009_SUPPLY_CHAIN_BASELINE.MD +++ b/docs/audit/009_SUPPLY_CHAIN_BASELINE.MD @@ -1,3 +1,7 @@ + +[DE](009_SUPPLY_CHAIN_BASELINE.MD) | [EN](109_SUPPLY_CHAIN_BASELINE.MD) + + # Supply-Chain-Baseline ## 1. Ziel diff --git a/docs/audit/010_REFACTOR_BACKLOG.MD b/docs/audit/010_REFACTOR_BACKLOG.MD index 6388cc6..55a196f 100644 --- a/docs/audit/010_REFACTOR_BACKLOG.MD +++ b/docs/audit/010_REFACTOR_BACKLOG.MD @@ -1,3 +1,7 @@ + +[DE](010_REFACTOR_BACKLOG.MD) | [EN](110_REFACTOR_BACKLOG.MD) + + # Refactor-Backlog (Cluster 7C) ## 1. Quelle diff --git a/docs/audit/011_SECURITY_BENCHMARK.MD b/docs/audit/011_SECURITY_BENCHMARK.MD index 953fc65..2cf3273 100644 --- a/docs/audit/011_SECURITY_BENCHMARK.MD +++ b/docs/audit/011_SECURITY_BENCHMARK.MD @@ -1,3 +1,7 @@ + +[DE](011_SECURITY_BENCHMARK.MD) | [EN](111_SECURITY_BENCHMARK.MD) + + # Security-Policy Benchmark (Stand: 2026-02-13) ## 1. Ziel und Scope diff --git a/docs/audit/012_WAVE_EXECUTION_DOD.MD b/docs/audit/012_WAVE_EXECUTION_DOD.MD index a6fc2b2..6810a45 100644 --- a/docs/audit/012_WAVE_EXECUTION_DOD.MD +++ b/docs/audit/012_WAVE_EXECUTION_DOD.MD @@ -1,3 +1,7 @@ + +[DE](012_WAVE_EXECUTION_DOD.MD) | [EN](112_WAVE_EXECUTION_DOD.MD) + + # Wave Execution DoD Matrix Stand: 2026-02-13 diff --git a/docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD b/docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD index 705c341..6820058 100644 --- a/docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD +++ b/docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD @@ -1,3 +1,7 @@ + +[DE](013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD) | [EN](113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD) + + # Scorecard Governance Alert Mapping (Ruleset/Prozess) Stand: 2026-02-13 diff --git a/docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD b/docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD index a4b0fce..d91ee61 100644 --- a/docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD +++ b/docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD @@ -1,3 +1,7 @@ + +[DE](014_EVIDENCE_REPORT_ISSUE_67.MD) | [EN](114_EVIDENCE_REPORT_ISSUE_67.MD) + + # Evidence Report — Issue #67 (Full Refactor & Production-Readiness Hardening) ## 1. Ziel / Scope diff --git a/docs/audit/015_DOC_BILINGUAL_MAPPING.MD b/docs/audit/015_DOC_BILINGUAL_MAPPING.MD index d68092c..5e6b3d7 100644 --- a/docs/audit/015_DOC_BILINGUAL_MAPPING.MD +++ b/docs/audit/015_DOC_BILINGUAL_MAPPING.MD @@ -1,3 +1,7 @@ + +[DE](015_DOC_BILINGUAL_MAPPING.MD) | [EN](115_DOC_BILINGUAL_MAPPING.MD) + + # Bilinguale Dokumentation: DE<->EN Mapping (0NN_ -> 1NN_) ## 1. Ziel & Scope diff --git a/docs/audit/100_HASHING_BASELINE.MD b/docs/audit/100_HASHING_BASELINE.MD index 3ae0282..eb1148a 100644 --- a/docs/audit/100_HASHING_BASELINE.MD +++ b/docs/audit/100_HASHING_BASELINE.MD @@ -1,3 +1,7 @@ + +[DE](000_HASHING_BASELINE.MD) | [EN](100_HASHING_BASELINE.MD) + + # Hashing Baseline Evidence (Historical Snapshot: pre EvidenceHashing rename) Date captured: 2026-02-10 diff --git a/docs/audit/100_INDEX.MD b/docs/audit/100_INDEX.MD index be4602b..c36d89f 100644 --- a/docs/audit/100_INDEX.MD +++ b/docs/audit/100_INDEX.MD @@ -1,3 +1,7 @@ + +[DE](000_INDEX.MD) | [EN](100_INDEX.MD) + + # Audit Index ## Scope diff --git a/docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD b/docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD index f4706a1..682f722 100644 --- a/docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD +++ b/docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD @@ -1,3 +1,7 @@ + +[DE](002_AUDIT_CONTRACT_AND_GUARDRAILS.MD) | [EN](102_AUDIT_CONTRACT_AND_GUARDRAILS.MD) + + # Audit Contract And Guardrails ## 1. Purpose diff --git a/docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD b/docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD index b979454..e9d3d6a 100644 --- a/docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD +++ b/docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD @@ -1,3 +1,7 @@ + +[DE](003_SECURITY_ASSERTION_TRACEABILITY.MD) | [EN](103_SECURITY_ASSERTION_TRACEABILITY.MD) + + # Security Assertion Traceability ## Scope diff --git a/docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD b/docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD index d1ec0de..004a969 100644 --- a/docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD +++ b/docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD @@ -1,3 +1,7 @@ + +[DE](004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD) | [EN](104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD) + + # Certification And Attestation Roadmap ## 1. Positioning diff --git a/docs/audit/105_CODE_ANALYSIS_METHOD.MD b/docs/audit/105_CODE_ANALYSIS_METHOD.MD index 64aed18..26feb66 100644 --- a/docs/audit/105_CODE_ANALYSIS_METHOD.MD +++ b/docs/audit/105_CODE_ANALYSIS_METHOD.MD @@ -1,3 +1,7 @@ + +[DE](005_CODE_ANALYSIS_METHOD.MD) | [EN](105_CODE_ANALYSIS_METHOD.MD) + + # Code Analysis Method ## 1. Goal diff --git a/docs/audit/106_CODE_REVIEW_FINDINGS.MD b/docs/audit/106_CODE_REVIEW_FINDINGS.MD index 93d6acb..601046f 100644 --- a/docs/audit/106_CODE_REVIEW_FINDINGS.MD +++ b/docs/audit/106_CODE_REVIEW_FINDINGS.MD @@ -1,3 +1,7 @@ + +[DE](006_CODE_REVIEW_FINDINGS.MD) | [EN](106_CODE_REVIEW_FINDINGS.MD) + + # Code Review Findings ## Scope diff --git a/docs/audit/107_THREAT_MODEL.MD b/docs/audit/107_THREAT_MODEL.MD index 059ff89..5fb60af 100644 --- a/docs/audit/107_THREAT_MODEL.MD +++ b/docs/audit/107_THREAT_MODEL.MD @@ -1,3 +1,7 @@ + +[DE](007_THREAT_MODEL.MD) | [EN](107_THREAT_MODEL.MD) + + # Threat Model ## 1. Scope diff --git a/docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD b/docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD index 6d0aa54..8ce5afa 100644 --- a/docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD +++ b/docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD @@ -1,3 +1,7 @@ + +[DE](008_INCIDENT_RESPONSE_RUNBOOK.MD) | [EN](108_INCIDENT_RESPONSE_RUNBOOK.MD) + + # Incident Response Runbook ## 1. Trigger Events diff --git a/docs/audit/109_SUPPLY_CHAIN_BASELINE.MD b/docs/audit/109_SUPPLY_CHAIN_BASELINE.MD index 21eb1da..2ebc676 100644 --- a/docs/audit/109_SUPPLY_CHAIN_BASELINE.MD +++ b/docs/audit/109_SUPPLY_CHAIN_BASELINE.MD @@ -1,3 +1,7 @@ + +[DE](009_SUPPLY_CHAIN_BASELINE.MD) | [EN](109_SUPPLY_CHAIN_BASELINE.MD) + + # Supply Chain Baseline ## 1. Objective diff --git a/docs/audit/110_REFACTOR_BACKLOG.MD b/docs/audit/110_REFACTOR_BACKLOG.MD index d63bce0..ca28a8a 100644 --- a/docs/audit/110_REFACTOR_BACKLOG.MD +++ b/docs/audit/110_REFACTOR_BACKLOG.MD @@ -1,3 +1,7 @@ + +[DE](010_REFACTOR_BACKLOG.MD) | [EN](110_REFACTOR_BACKLOG.MD) + + # Refactor Backlog (Cluster 7C) ## 1. Source diff --git a/docs/audit/111_SECURITY_BENCHMARK.MD b/docs/audit/111_SECURITY_BENCHMARK.MD index 7ce55b8..8446c63 100644 --- a/docs/audit/111_SECURITY_BENCHMARK.MD +++ b/docs/audit/111_SECURITY_BENCHMARK.MD @@ -1,3 +1,7 @@ + +[DE](011_SECURITY_BENCHMARK.MD) | [EN](111_SECURITY_BENCHMARK.MD) + + # Security Policy Benchmark (as of 2026-02-13) ## 1. Goal and Scope diff --git a/docs/audit/112_WAVE_EXECUTION_DOD.MD b/docs/audit/112_WAVE_EXECUTION_DOD.MD index eb6aee4..e586a6b 100644 --- a/docs/audit/112_WAVE_EXECUTION_DOD.MD +++ b/docs/audit/112_WAVE_EXECUTION_DOD.MD @@ -1,3 +1,7 @@ + +[DE](012_WAVE_EXECUTION_DOD.MD) | [EN](112_WAVE_EXECUTION_DOD.MD) + + # Wave Execution DoD Matrix As of: 2026-02-13 diff --git a/docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD b/docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD index 59be45c..ef94a9b 100644 --- a/docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD +++ b/docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD @@ -1,3 +1,7 @@ + +[DE](013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD) | [EN](113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD) + + # Scorecard Governance Alert Mapping (Ruleset/Process) As of: 2026-02-13 diff --git a/docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD b/docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD index cb854b7..f00e882 100644 --- a/docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD +++ b/docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD @@ -1,3 +1,7 @@ + +[DE](014_EVIDENCE_REPORT_ISSUE_67.MD) | [EN](114_EVIDENCE_REPORT_ISSUE_67.MD) + + # Evidence Report — Issue #67 (Full Refactor & Production-Readiness Hardening) ## 1. Goal / Scope diff --git a/docs/audit/115_DOC_BILINGUAL_MAPPING.MD b/docs/audit/115_DOC_BILINGUAL_MAPPING.MD index e5aa416..2bea22f 100644 --- a/docs/audit/115_DOC_BILINGUAL_MAPPING.MD +++ b/docs/audit/115_DOC_BILINGUAL_MAPPING.MD @@ -1,3 +1,7 @@ + +[DE](015_DOC_BILINGUAL_MAPPING.MD) | [EN](115_DOC_BILINGUAL_MAPPING.MD) + + # Bilingual Documentation: DE<->EN Mapping (0NN_ -> 1NN_) ## 1. Goal & Scope diff --git a/docs/ci/001_PIPELINE_CI.MD b/docs/ci/001_PIPELINE_CI.MD index cc7fb80..eb20282 100644 --- a/docs/ci/001_PIPELINE_CI.MD +++ b/docs/ci/001_PIPELINE_CI.MD @@ -1,3 +1,7 @@ + +[DE](001_PIPELINE_CI.MD) | [EN](101_PIPELINE_CI.MD) + + # CI-Pipeline (SSOT) ## Zweck und Scope diff --git a/docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD b/docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD index b39e64d..327059a 100644 --- a/docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD +++ b/docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD @@ -1,3 +1,7 @@ + +[DE](002_NUGET_TRUSTED_PUBLISHING.MD) | [EN](102_NUGET_TRUSTED_PUBLISHING.MD) + + # NuGet Trusted Publishing (OIDC) ## 1. Zweck diff --git a/docs/ci/101_PIPELINE_CI.MD b/docs/ci/101_PIPELINE_CI.MD index 482f348..c88cdd6 100644 --- a/docs/ci/101_PIPELINE_CI.MD +++ b/docs/ci/101_PIPELINE_CI.MD @@ -1,3 +1,7 @@ + +[DE](001_PIPELINE_CI.MD) | [EN](101_PIPELINE_CI.MD) + + # CI Pipeline (SSOT) ## Scope diff --git a/docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD b/docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD index 1c6e492..de02610 100644 --- a/docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD +++ b/docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD @@ -1,3 +1,7 @@ + +[DE](002_NUGET_TRUSTED_PUBLISHING.MD) | [EN](102_NUGET_TRUSTED_PUBLISHING.MD) + + # NuGet Trusted Publishing (OIDC) ## 1. Purpose diff --git a/docs/contracts/001_CONTRACT_HASHING.MD b/docs/contracts/001_CONTRACT_HASHING.MD index 33c0cb2..2e6cd9d 100644 --- a/docs/contracts/001_CONTRACT_HASHING.MD +++ b/docs/contracts/001_CONTRACT_HASHING.MD @@ -1,3 +1,7 @@ + +[DE](001_CONTRACT_HASHING.MD) | [EN](101_CONTRACT_HASHING.MD) + + # 04 - EvidenceHashing API Contract ## 1. Zweck und Scope diff --git a/docs/contracts/101_CONTRACT_HASHING.MD b/docs/contracts/101_CONTRACT_HASHING.MD index 86958f3..da9dbc8 100644 --- a/docs/contracts/101_CONTRACT_HASHING.MD +++ b/docs/contracts/101_CONTRACT_HASHING.MD @@ -1,3 +1,7 @@ + +[DE](001_CONTRACT_HASHING.MD) | [EN](101_CONTRACT_HASHING.MD) + + # 04 - EvidenceHashing API Contract ## 1. Purpose and Scope diff --git a/docs/governance/001_POLICY_CI.MD b/docs/governance/001_POLICY_CI.MD index f032c2f..caab5bb 100644 --- a/docs/governance/001_POLICY_CI.MD +++ b/docs/governance/001_POLICY_CI.MD @@ -1,3 +1,7 @@ + +[DE](001_POLICY_CI.MD) | [EN](101_POLICY_CI.MD) + + # CI Policy (SSOT) ## Scope diff --git a/docs/governance/002_POLICY_LABELING.MD b/docs/governance/002_POLICY_LABELING.MD index 670351f..925fa12 100644 --- a/docs/governance/002_POLICY_LABELING.MD +++ b/docs/governance/002_POLICY_LABELING.MD @@ -1,3 +1,7 @@ + +[DE](002_POLICY_LABELING.MD) | [EN](102_POLICY_LABELING.MD) + + # Labeling Ownership ## 1. Scope diff --git a/docs/governance/002_POLICY_NAMING_UNIFIED.MD b/docs/governance/002_POLICY_NAMING_UNIFIED.MD index 23b7671..b0e9b12 100644 --- a/docs/governance/002_POLICY_NAMING_UNIFIED.MD +++ b/docs/governance/002_POLICY_NAMING_UNIFIED.MD @@ -1,3 +1,7 @@ + +[DE](002_POLICY_NAMING_UNIFIED.MD) | [EN](102_POLICY_NAMING_UNIFIED.MD) + + # Unified Naming Policy (SSOT) ## 1. Purpose diff --git a/docs/governance/003_INDEX_GOVERNANCE.MD b/docs/governance/003_INDEX_GOVERNANCE.MD index f18df6f..1f05d86 100644 --- a/docs/governance/003_INDEX_GOVERNANCE.MD +++ b/docs/governance/003_INDEX_GOVERNANCE.MD @@ -1,3 +1,7 @@ + +[DE](003_INDEX_GOVERNANCE.MD) | [EN](103_INDEX_GOVERNANCE.MD) + + # Policy Index (SSOT Navigation) This index is non-normative. Normative policy definitions are the rule files under `tools/ci/policies/rules/`. diff --git a/docs/governance/003_POLICY_VERSIONING_SVT.MD b/docs/governance/003_POLICY_VERSIONING_SVT.MD index aec978e..45bed8a 100644 --- a/docs/governance/003_POLICY_VERSIONING_SVT.MD +++ b/docs/governance/003_POLICY_VERSIONING_SVT.MD @@ -1,3 +1,7 @@ + +[DE](003_POLICY_VERSIONING_SVT.MD) | [EN](103_POLICY_VERSIONING_SVT.MD) + + # Versioning Policy (SVT) ## 1. Purpose diff --git a/docs/governance/004_POLICY_DOCUMENTATION.MD b/docs/governance/004_POLICY_DOCUMENTATION.MD index fc7eb4c..e25dcfa 100644 --- a/docs/governance/004_POLICY_DOCUMENTATION.MD +++ b/docs/governance/004_POLICY_DOCUMENTATION.MD @@ -1,3 +1,7 @@ + +[DE](004_POLICY_DOCUMENTATION.MD) | [EN](104_POLICY_DOCUMENTATION.MD) + + # Dokumentationsstandard (SSOT) ## 1. Zweck diff --git a/docs/governance/005_POLICY_NAMING.MD b/docs/governance/005_POLICY_NAMING.MD index e78e67a..886b9f4 100644 --- a/docs/governance/005_POLICY_NAMING.MD +++ b/docs/governance/005_POLICY_NAMING.MD @@ -1,3 +1,7 @@ + +[DE](005_POLICY_NAMING.MD) | [EN](105_POLICY_NAMING.MD) + + # Naming Policy (SNT Level 3) ## 1. Ziel und Geltungsbereich diff --git a/docs/governance/006_INDEX_CI_RULES.MD b/docs/governance/006_INDEX_CI_RULES.MD index 89b82d4..fbb5e85 100644 --- a/docs/governance/006_INDEX_CI_RULES.MD +++ b/docs/governance/006_INDEX_CI_RULES.MD @@ -1,3 +1,7 @@ + +[DE](006_INDEX_CI_RULES.MD) | [EN](106_INDEX_CI_RULES.MD) + + # CI Policy Rules | rule_id | file | diff --git a/docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD b/docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD index bfd8349..d21e0ed 100644 --- a/docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD +++ b/docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD @@ -1,3 +1,7 @@ + +[DE](007_POLICY_BRANCH_PR_NAMING_DE.MD) | [EN](107_POLICY_BRANCH_PR_NAMING_DE.MD) + + # Policy Branch/PR Naming (DE) ## 1. Zweck diff --git a/docs/governance/101_POLICY_CI.MD b/docs/governance/101_POLICY_CI.MD index 3981bcc..62bb296 100644 --- a/docs/governance/101_POLICY_CI.MD +++ b/docs/governance/101_POLICY_CI.MD @@ -1,3 +1,7 @@ + +[DE](001_POLICY_CI.MD) | [EN](101_POLICY_CI.MD) + + # CI Policy (SSOT) ## Scope diff --git a/docs/governance/102_POLICY_LABELING.MD b/docs/governance/102_POLICY_LABELING.MD index 622c0fe..ee3521e 100644 --- a/docs/governance/102_POLICY_LABELING.MD +++ b/docs/governance/102_POLICY_LABELING.MD @@ -1,3 +1,7 @@ + +[DE](002_POLICY_LABELING.MD) | [EN](102_POLICY_LABELING.MD) + + # Labeling Ownership ## 1. Scope diff --git a/docs/governance/102_POLICY_NAMING_UNIFIED.MD b/docs/governance/102_POLICY_NAMING_UNIFIED.MD index 23b7671..b0e9b12 100644 --- a/docs/governance/102_POLICY_NAMING_UNIFIED.MD +++ b/docs/governance/102_POLICY_NAMING_UNIFIED.MD @@ -1,3 +1,7 @@ + +[DE](002_POLICY_NAMING_UNIFIED.MD) | [EN](102_POLICY_NAMING_UNIFIED.MD) + + # Unified Naming Policy (SSOT) ## 1. Purpose diff --git a/docs/governance/103_INDEX_GOVERNANCE.MD b/docs/governance/103_INDEX_GOVERNANCE.MD index 34242dc..a3ca619 100644 --- a/docs/governance/103_INDEX_GOVERNANCE.MD +++ b/docs/governance/103_INDEX_GOVERNANCE.MD @@ -1,3 +1,7 @@ + +[DE](003_INDEX_GOVERNANCE.MD) | [EN](103_INDEX_GOVERNANCE.MD) + + # Policy Index (SSOT Navigation) This index is non-normative. Normative policy definitions are the rule files under `tools/ci/policies/rules/`. diff --git a/docs/governance/103_POLICY_VERSIONING_SVT.MD b/docs/governance/103_POLICY_VERSIONING_SVT.MD index aec978e..45bed8a 100644 --- a/docs/governance/103_POLICY_VERSIONING_SVT.MD +++ b/docs/governance/103_POLICY_VERSIONING_SVT.MD @@ -1,3 +1,7 @@ + +[DE](003_POLICY_VERSIONING_SVT.MD) | [EN](103_POLICY_VERSIONING_SVT.MD) + + # Versioning Policy (SVT) ## 1. Purpose diff --git a/docs/governance/104_POLICY_DOCUMENTATION.MD b/docs/governance/104_POLICY_DOCUMENTATION.MD index 4bdb3d2..269f3a8 100644 --- a/docs/governance/104_POLICY_DOCUMENTATION.MD +++ b/docs/governance/104_POLICY_DOCUMENTATION.MD @@ -1,3 +1,7 @@ + +[DE](004_POLICY_DOCUMENTATION.MD) | [EN](104_POLICY_DOCUMENTATION.MD) + + # Documentation Standard (SSOT) ## 1. Purpose diff --git a/docs/governance/105_POLICY_NAMING.MD b/docs/governance/105_POLICY_NAMING.MD index 9f484e0..dfd34a1 100644 --- a/docs/governance/105_POLICY_NAMING.MD +++ b/docs/governance/105_POLICY_NAMING.MD @@ -1,3 +1,7 @@ + +[DE](005_POLICY_NAMING.MD) | [EN](105_POLICY_NAMING.MD) + + # Naming Policy (SNT Level 3) ## 1. Goal and Scope diff --git a/docs/governance/106_INDEX_CI_RULES.MD b/docs/governance/106_INDEX_CI_RULES.MD index 89b82d4..fbb5e85 100644 --- a/docs/governance/106_INDEX_CI_RULES.MD +++ b/docs/governance/106_INDEX_CI_RULES.MD @@ -1,3 +1,7 @@ + +[DE](006_INDEX_CI_RULES.MD) | [EN](106_INDEX_CI_RULES.MD) + + # CI Policy Rules | rule_id | file | diff --git a/docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD b/docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD index 3c1873c..d37f182 100644 --- a/docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD +++ b/docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD @@ -1,3 +1,7 @@ + +[DE](007_POLICY_BRANCH_PR_NAMING_DE.MD) | [EN](107_POLICY_BRANCH_PR_NAMING_DE.MD) + + # Policy Branch/PR Naming (DE) ## 1. Purpose diff --git a/docs/guides/000_INDEX_GUIDES.MD b/docs/guides/000_INDEX_GUIDES.MD index b5ba121..2818e63 100644 --- a/docs/guides/000_INDEX_GUIDES.MD +++ b/docs/guides/000_INDEX_GUIDES.MD @@ -1,3 +1,7 @@ + +[DE](000_INDEX_GUIDES.MD) | [EN](100_INDEX_GUIDES.MD) + + # Guides - Change Playbooks ## 1. Zweck diff --git a/docs/guides/001_GUIDE_OPTIONS.MD b/docs/guides/001_GUIDE_OPTIONS.MD index f7fe8b5..6352658 100644 --- a/docs/guides/001_GUIDE_OPTIONS.MD +++ b/docs/guides/001_GUIDE_OPTIONS.MD @@ -1,3 +1,7 @@ + +[DE](001_GUIDE_OPTIONS.MD) | [EN](101_GUIDE_OPTIONS.MD) + + # Playbook: Options anlegen und anpassen ## 1. Zweck und Zielgruppe diff --git a/docs/guides/002_GUIDE_DATATYPE.MD b/docs/guides/002_GUIDE_DATATYPE.MD index 7f0cfc8..c4c96c3 100644 --- a/docs/guides/002_GUIDE_DATATYPE.MD +++ b/docs/guides/002_GUIDE_DATATYPE.MD @@ -1,3 +1,7 @@ + +[DE](002_GUIDE_DATATYPE.MD) | [EN](102_GUIDE_DATATYPE.MD) + + # Playbook: Neue Datatypes und API-Modelle erweitern ## 1. Zweck und Zielgruppe diff --git a/docs/guides/003_GUIDE_PORTABLE.MD b/docs/guides/003_GUIDE_PORTABLE.MD index cb575c6..5ea224b 100644 --- a/docs/guides/003_GUIDE_PORTABLE.MD +++ b/docs/guides/003_GUIDE_PORTABLE.MD @@ -1,3 +1,7 @@ + +[DE](003_GUIDE_PORTABLE.MD) | [EN](103_GUIDE_PORTABLE.MD) + + # Portable Adoption Guide (NuGet) ## 1. Ziel diff --git a/docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD b/docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD index f3bbb93..a0bbf42 100644 --- a/docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD +++ b/docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD @@ -1,3 +1,7 @@ + +[DE](004_GUIDE_MIGRATE_LEGACY_NUGET.MD) | [EN](104_GUIDE_MIGRATE_LEGACY_NUGET.MD) + + # Migration Guide: Legacy NuGet ID to Canonical Package ## Scope diff --git a/docs/guides/100_INDEX_GUIDES.MD b/docs/guides/100_INDEX_GUIDES.MD index 6a29446..2fd0d7a 100644 --- a/docs/guides/100_INDEX_GUIDES.MD +++ b/docs/guides/100_INDEX_GUIDES.MD @@ -1,3 +1,7 @@ + +[DE](000_INDEX_GUIDES.MD) | [EN](100_INDEX_GUIDES.MD) + + # Guides - Change Playbooks ## 1. Purpose diff --git a/docs/guides/101_GUIDE_OPTIONS.MD b/docs/guides/101_GUIDE_OPTIONS.MD index 865f79f..98f2984 100644 --- a/docs/guides/101_GUIDE_OPTIONS.MD +++ b/docs/guides/101_GUIDE_OPTIONS.MD @@ -1,3 +1,7 @@ + +[DE](001_GUIDE_OPTIONS.MD) | [EN](101_GUIDE_OPTIONS.MD) + + # Playbook: Create and Adjust Options ## 1. Purpose and Audience diff --git a/docs/guides/102_GUIDE_DATATYPE.MD b/docs/guides/102_GUIDE_DATATYPE.MD index 79d4af5..47cdba3 100644 --- a/docs/guides/102_GUIDE_DATATYPE.MD +++ b/docs/guides/102_GUIDE_DATATYPE.MD @@ -1,3 +1,7 @@ + +[DE](002_GUIDE_DATATYPE.MD) | [EN](102_GUIDE_DATATYPE.MD) + + # Playbook: Extend New Datatypes and API Models ## 1. Purpose and Audience diff --git a/docs/guides/103_GUIDE_PORTABLE.MD b/docs/guides/103_GUIDE_PORTABLE.MD index 2fe8930..5d2ebcf 100644 --- a/docs/guides/103_GUIDE_PORTABLE.MD +++ b/docs/guides/103_GUIDE_PORTABLE.MD @@ -1,3 +1,7 @@ + +[DE](003_GUIDE_PORTABLE.MD) | [EN](103_GUIDE_PORTABLE.MD) + + # Portable Adoption Guide (NuGet) ## 1. Goal diff --git a/docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD b/docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD index f3bbb93..a0bbf42 100644 --- a/docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD +++ b/docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD @@ -1,3 +1,7 @@ + +[DE](004_GUIDE_MIGRATE_LEGACY_NUGET.MD) | [EN](104_GUIDE_MIGRATE_LEGACY_NUGET.MD) + + # Migration Guide: Legacy NuGet ID to Canonical Package ## Scope diff --git a/docs/lang_switch_report.json b/docs/lang_switch_report.json new file mode 100644 index 0000000..27ab80d --- /dev/null +++ b/docs/lang_switch_report.json @@ -0,0 +1,935 @@ +{ + "summary": { + "total_files": 102, + "changed_files": 102, + "ok": 102, + "missing_counterpart": 0, + "needs_map": 0 + }, + "changed_files": [ + "docs/001_INDEX_CORE.MD", + "docs/010_API_CORE.MD", + "docs/020_ARCH_CORE.MD", + "docs/021_USAGE_NUGET.MD", + "docs/101_INDEX_CORE.MD", + "docs/110_API_CORE.MD", + "docs/120_ARCH_CORE.MD", + "docs/121_USAGE_NUGET.MD", + "docs/audit/000_HASHING_BASELINE.MD", + "docs/audit/000_INDEX.MD", + "docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD", + "docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "docs/audit/005_CODE_ANALYSIS_METHOD.MD", + "docs/audit/006_CODE_REVIEW_FINDINGS.MD", + "docs/audit/007_THREAT_MODEL.MD", + "docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD", + "docs/audit/009_SUPPLY_CHAIN_BASELINE.MD", + "docs/audit/010_REFACTOR_BACKLOG.MD", + "docs/audit/011_SECURITY_BENCHMARK.MD", + "docs/audit/012_WAVE_EXECUTION_DOD.MD", + "docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD", + "docs/audit/015_DOC_BILINGUAL_MAPPING.MD", + "docs/audit/100_HASHING_BASELINE.MD", + "docs/audit/100_INDEX.MD", + "docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD", + "docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "docs/audit/105_CODE_ANALYSIS_METHOD.MD", + "docs/audit/106_CODE_REVIEW_FINDINGS.MD", + "docs/audit/107_THREAT_MODEL.MD", + "docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD", + "docs/audit/109_SUPPLY_CHAIN_BASELINE.MD", + "docs/audit/110_REFACTOR_BACKLOG.MD", + "docs/audit/111_SECURITY_BENCHMARK.MD", + "docs/audit/112_WAVE_EXECUTION_DOD.MD", + "docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD", + "docs/audit/115_DOC_BILINGUAL_MAPPING.MD", + "docs/ci/001_PIPELINE_CI.MD", + "docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD", + "docs/ci/101_PIPELINE_CI.MD", + "docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD", + "docs/contracts/001_CONTRACT_HASHING.MD", + "docs/contracts/101_CONTRACT_HASHING.MD", + "docs/governance/001_POLICY_CI.MD", + "docs/governance/002_POLICY_LABELING.MD", + "docs/governance/002_POLICY_NAMING_UNIFIED.MD", + "docs/governance/003_INDEX_GOVERNANCE.MD", + "docs/governance/003_POLICY_VERSIONING_SVT.MD", + "docs/governance/004_POLICY_DOCUMENTATION.MD", + "docs/governance/005_POLICY_NAMING.MD", + "docs/governance/006_INDEX_CI_RULES.MD", + "docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD", + "docs/governance/101_POLICY_CI.MD", + "docs/governance/102_POLICY_LABELING.MD", + "docs/governance/102_POLICY_NAMING_UNIFIED.MD", + "docs/governance/103_INDEX_GOVERNANCE.MD", + "docs/governance/103_POLICY_VERSIONING_SVT.MD", + "docs/governance/104_POLICY_DOCUMENTATION.MD", + "docs/governance/105_POLICY_NAMING.MD", + "docs/governance/106_INDEX_CI_RULES.MD", + "docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD", + "docs/guides/000_INDEX_GUIDES.MD", + "docs/guides/001_GUIDE_OPTIONS.MD", + "docs/guides/002_GUIDE_DATATYPE.MD", + "docs/guides/003_GUIDE_PORTABLE.MD", + "docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "docs/guides/100_INDEX_GUIDES.MD", + "docs/guides/101_GUIDE_OPTIONS.MD", + "docs/guides/102_GUIDE_DATATYPE.MD", + "docs/guides/103_GUIDE_PORTABLE.MD", + "docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "docs/migrations/001_HASHING_RENAME.MD", + "docs/migrations/101_HASHING_RENAME.MD", + "docs/quality/001_CHECKLIST_PRODUCTION.MD", + "docs/quality/101_CHECKLIST_PRODUCTION.MD", + "docs/references/001_REFERENCES_CORE.MD", + "docs/references/101_REFERENCES_CORE.MD", + "docs/secure/001_HMAC_KEY_SETUP.MD", + "docs/secure/101_HMAC_KEY_SETUP.MD", + "docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "docs/specs/001_SPEC_DIN.MD", + "docs/specs/101_SPEC_DIN.MD", + "docs/verification/001_INDEX_TESTS.MD", + "docs/verification/002_FLOW_BDD.MD", + "docs/verification/003_CATALOG_BDD.MD", + "docs/verification/004_MATRIX_HASHING.MD", + "docs/verification/101_INDEX_TESTS.MD", + "docs/verification/102_FLOW_BDD.MD", + "docs/verification/103_CATALOG_BDD.MD", + "docs/verification/104_MATRIX_HASHING.MD", + "docs/versioning/001_POLICY_VERSIONING.MD", + "docs/versioning/002_HISTORY_VERSIONS.MD", + "docs/versioning/003_CHANGELOG_RELEASES.MD", + "docs/versioning/004_POLICY_LABELING.MD", + "docs/versioning/101_POLICY_VERSIONING.MD", + "docs/versioning/102_HISTORY_VERSIONS.MD", + "docs/versioning/103_CHANGELOG_RELEASES.MD", + "docs/versioning/104_POLICY_LABELING.MD" + ], + "ok": [ + "docs/001_INDEX_CORE.MD", + "docs/010_API_CORE.MD", + "docs/020_ARCH_CORE.MD", + "docs/021_USAGE_NUGET.MD", + "docs/101_INDEX_CORE.MD", + "docs/110_API_CORE.MD", + "docs/120_ARCH_CORE.MD", + "docs/121_USAGE_NUGET.MD", + "docs/audit/000_HASHING_BASELINE.MD", + "docs/audit/000_INDEX.MD", + "docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD", + "docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "docs/audit/005_CODE_ANALYSIS_METHOD.MD", + "docs/audit/006_CODE_REVIEW_FINDINGS.MD", + "docs/audit/007_THREAT_MODEL.MD", + "docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD", + "docs/audit/009_SUPPLY_CHAIN_BASELINE.MD", + "docs/audit/010_REFACTOR_BACKLOG.MD", + "docs/audit/011_SECURITY_BENCHMARK.MD", + "docs/audit/012_WAVE_EXECUTION_DOD.MD", + "docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD", + "docs/audit/015_DOC_BILINGUAL_MAPPING.MD", + "docs/audit/100_HASHING_BASELINE.MD", + "docs/audit/100_INDEX.MD", + "docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD", + "docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "docs/audit/105_CODE_ANALYSIS_METHOD.MD", + "docs/audit/106_CODE_REVIEW_FINDINGS.MD", + "docs/audit/107_THREAT_MODEL.MD", + "docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD", + "docs/audit/109_SUPPLY_CHAIN_BASELINE.MD", + "docs/audit/110_REFACTOR_BACKLOG.MD", + "docs/audit/111_SECURITY_BENCHMARK.MD", + "docs/audit/112_WAVE_EXECUTION_DOD.MD", + "docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD", + "docs/audit/115_DOC_BILINGUAL_MAPPING.MD", + "docs/ci/001_PIPELINE_CI.MD", + "docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD", + "docs/ci/101_PIPELINE_CI.MD", + "docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD", + "docs/contracts/001_CONTRACT_HASHING.MD", + "docs/contracts/101_CONTRACT_HASHING.MD", + "docs/governance/001_POLICY_CI.MD", + "docs/governance/002_POLICY_LABELING.MD", + "docs/governance/002_POLICY_NAMING_UNIFIED.MD", + "docs/governance/003_INDEX_GOVERNANCE.MD", + "docs/governance/003_POLICY_VERSIONING_SVT.MD", + "docs/governance/004_POLICY_DOCUMENTATION.MD", + "docs/governance/005_POLICY_NAMING.MD", + "docs/governance/006_INDEX_CI_RULES.MD", + "docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD", + "docs/governance/101_POLICY_CI.MD", + "docs/governance/102_POLICY_LABELING.MD", + "docs/governance/102_POLICY_NAMING_UNIFIED.MD", + "docs/governance/103_INDEX_GOVERNANCE.MD", + "docs/governance/103_POLICY_VERSIONING_SVT.MD", + "docs/governance/104_POLICY_DOCUMENTATION.MD", + "docs/governance/105_POLICY_NAMING.MD", + "docs/governance/106_INDEX_CI_RULES.MD", + "docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD", + "docs/guides/000_INDEX_GUIDES.MD", + "docs/guides/001_GUIDE_OPTIONS.MD", + "docs/guides/002_GUIDE_DATATYPE.MD", + "docs/guides/003_GUIDE_PORTABLE.MD", + "docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "docs/guides/100_INDEX_GUIDES.MD", + "docs/guides/101_GUIDE_OPTIONS.MD", + "docs/guides/102_GUIDE_DATATYPE.MD", + "docs/guides/103_GUIDE_PORTABLE.MD", + "docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "docs/migrations/001_HASHING_RENAME.MD", + "docs/migrations/101_HASHING_RENAME.MD", + "docs/quality/001_CHECKLIST_PRODUCTION.MD", + "docs/quality/101_CHECKLIST_PRODUCTION.MD", + "docs/references/001_REFERENCES_CORE.MD", + "docs/references/101_REFERENCES_CORE.MD", + "docs/secure/001_HMAC_KEY_SETUP.MD", + "docs/secure/101_HMAC_KEY_SETUP.MD", + "docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "docs/specs/001_SPEC_DIN.MD", + "docs/specs/101_SPEC_DIN.MD", + "docs/verification/001_INDEX_TESTS.MD", + "docs/verification/002_FLOW_BDD.MD", + "docs/verification/003_CATALOG_BDD.MD", + "docs/verification/004_MATRIX_HASHING.MD", + "docs/verification/101_INDEX_TESTS.MD", + "docs/verification/102_FLOW_BDD.MD", + "docs/verification/103_CATALOG_BDD.MD", + "docs/verification/104_MATRIX_HASHING.MD", + "docs/versioning/001_POLICY_VERSIONING.MD", + "docs/versioning/002_HISTORY_VERSIONS.MD", + "docs/versioning/003_CHANGELOG_RELEASES.MD", + "docs/versioning/004_POLICY_LABELING.MD", + "docs/versioning/101_POLICY_VERSIONING.MD", + "docs/versioning/102_HISTORY_VERSIONS.MD", + "docs/versioning/103_CHANGELOG_RELEASES.MD", + "docs/versioning/104_POLICY_LABELING.MD" + ], + "missing_counterpart": [], + "needs_map": [], + "records": [ + { + "file": "docs/001_INDEX_CORE.MD", + "counterpart": "docs/101_INDEX_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/010_API_CORE.MD", + "counterpart": "docs/110_API_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/020_ARCH_CORE.MD", + "counterpart": "docs/120_ARCH_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/021_USAGE_NUGET.MD", + "counterpart": "docs/121_USAGE_NUGET.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/101_INDEX_CORE.MD", + "counterpart": "docs/001_INDEX_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/110_API_CORE.MD", + "counterpart": "docs/010_API_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/120_ARCH_CORE.MD", + "counterpart": "docs/020_ARCH_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/121_USAGE_NUGET.MD", + "counterpart": "docs/021_USAGE_NUGET.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/000_HASHING_BASELINE.MD", + "counterpart": "docs/audit/100_HASHING_BASELINE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/000_INDEX.MD", + "counterpart": "docs/audit/100_INDEX.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "counterpart": "docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD", + "counterpart": "docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "counterpart": "docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/005_CODE_ANALYSIS_METHOD.MD", + "counterpart": "docs/audit/105_CODE_ANALYSIS_METHOD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/006_CODE_REVIEW_FINDINGS.MD", + "counterpart": "docs/audit/106_CODE_REVIEW_FINDINGS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/007_THREAT_MODEL.MD", + "counterpart": "docs/audit/107_THREAT_MODEL.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD", + "counterpart": "docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/009_SUPPLY_CHAIN_BASELINE.MD", + "counterpart": "docs/audit/109_SUPPLY_CHAIN_BASELINE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/010_REFACTOR_BACKLOG.MD", + "counterpart": "docs/audit/110_REFACTOR_BACKLOG.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/011_SECURITY_BENCHMARK.MD", + "counterpart": "docs/audit/111_SECURITY_BENCHMARK.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/012_WAVE_EXECUTION_DOD.MD", + "counterpart": "docs/audit/112_WAVE_EXECUTION_DOD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "counterpart": "docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD", + "counterpart": "docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/015_DOC_BILINGUAL_MAPPING.MD", + "counterpart": "docs/audit/115_DOC_BILINGUAL_MAPPING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/100_HASHING_BASELINE.MD", + "counterpart": "docs/audit/000_HASHING_BASELINE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/100_INDEX.MD", + "counterpart": "docs/audit/000_INDEX.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "counterpart": "docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD", + "counterpart": "docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "counterpart": "docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/105_CODE_ANALYSIS_METHOD.MD", + "counterpart": "docs/audit/005_CODE_ANALYSIS_METHOD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/106_CODE_REVIEW_FINDINGS.MD", + "counterpart": "docs/audit/006_CODE_REVIEW_FINDINGS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/107_THREAT_MODEL.MD", + "counterpart": "docs/audit/007_THREAT_MODEL.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD", + "counterpart": "docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/109_SUPPLY_CHAIN_BASELINE.MD", + "counterpart": "docs/audit/009_SUPPLY_CHAIN_BASELINE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/110_REFACTOR_BACKLOG.MD", + "counterpart": "docs/audit/010_REFACTOR_BACKLOG.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/111_SECURITY_BENCHMARK.MD", + "counterpart": "docs/audit/011_SECURITY_BENCHMARK.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/112_WAVE_EXECUTION_DOD.MD", + "counterpart": "docs/audit/012_WAVE_EXECUTION_DOD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "counterpart": "docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD", + "counterpart": "docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/audit/115_DOC_BILINGUAL_MAPPING.MD", + "counterpart": "docs/audit/015_DOC_BILINGUAL_MAPPING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/ci/001_PIPELINE_CI.MD", + "counterpart": "docs/ci/101_PIPELINE_CI.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD", + "counterpart": "docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/ci/101_PIPELINE_CI.MD", + "counterpart": "docs/ci/001_PIPELINE_CI.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD", + "counterpart": "docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/contracts/001_CONTRACT_HASHING.MD", + "counterpart": "docs/contracts/101_CONTRACT_HASHING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/contracts/101_CONTRACT_HASHING.MD", + "counterpart": "docs/contracts/001_CONTRACT_HASHING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/001_POLICY_CI.MD", + "counterpart": "docs/governance/101_POLICY_CI.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/002_POLICY_LABELING.MD", + "counterpart": "docs/governance/102_POLICY_LABELING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/002_POLICY_NAMING_UNIFIED.MD", + "counterpart": "docs/governance/102_POLICY_NAMING_UNIFIED.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/003_INDEX_GOVERNANCE.MD", + "counterpart": "docs/governance/103_INDEX_GOVERNANCE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/003_POLICY_VERSIONING_SVT.MD", + "counterpart": "docs/governance/103_POLICY_VERSIONING_SVT.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/004_POLICY_DOCUMENTATION.MD", + "counterpart": "docs/governance/104_POLICY_DOCUMENTATION.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/005_POLICY_NAMING.MD", + "counterpart": "docs/governance/105_POLICY_NAMING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/006_INDEX_CI_RULES.MD", + "counterpart": "docs/governance/106_INDEX_CI_RULES.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD", + "counterpart": "docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/101_POLICY_CI.MD", + "counterpart": "docs/governance/001_POLICY_CI.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/102_POLICY_LABELING.MD", + "counterpart": "docs/governance/002_POLICY_LABELING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/102_POLICY_NAMING_UNIFIED.MD", + "counterpart": "docs/governance/002_POLICY_NAMING_UNIFIED.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/103_INDEX_GOVERNANCE.MD", + "counterpart": "docs/governance/003_INDEX_GOVERNANCE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/103_POLICY_VERSIONING_SVT.MD", + "counterpart": "docs/governance/003_POLICY_VERSIONING_SVT.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/104_POLICY_DOCUMENTATION.MD", + "counterpart": "docs/governance/004_POLICY_DOCUMENTATION.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/105_POLICY_NAMING.MD", + "counterpart": "docs/governance/005_POLICY_NAMING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/106_INDEX_CI_RULES.MD", + "counterpart": "docs/governance/006_INDEX_CI_RULES.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD", + "counterpart": "docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/000_INDEX_GUIDES.MD", + "counterpart": "docs/guides/100_INDEX_GUIDES.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/001_GUIDE_OPTIONS.MD", + "counterpart": "docs/guides/101_GUIDE_OPTIONS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/002_GUIDE_DATATYPE.MD", + "counterpart": "docs/guides/102_GUIDE_DATATYPE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/003_GUIDE_PORTABLE.MD", + "counterpart": "docs/guides/103_GUIDE_PORTABLE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "counterpart": "docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/100_INDEX_GUIDES.MD", + "counterpart": "docs/guides/000_INDEX_GUIDES.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/101_GUIDE_OPTIONS.MD", + "counterpart": "docs/guides/001_GUIDE_OPTIONS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/102_GUIDE_DATATYPE.MD", + "counterpart": "docs/guides/002_GUIDE_DATATYPE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/103_GUIDE_PORTABLE.MD", + "counterpart": "docs/guides/003_GUIDE_PORTABLE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "counterpart": "docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/migrations/001_HASHING_RENAME.MD", + "counterpart": "docs/migrations/101_HASHING_RENAME.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/migrations/101_HASHING_RENAME.MD", + "counterpart": "docs/migrations/001_HASHING_RENAME.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/quality/001_CHECKLIST_PRODUCTION.MD", + "counterpart": "docs/quality/101_CHECKLIST_PRODUCTION.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/quality/101_CHECKLIST_PRODUCTION.MD", + "counterpart": "docs/quality/001_CHECKLIST_PRODUCTION.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/references/001_REFERENCES_CORE.MD", + "counterpart": "docs/references/101_REFERENCES_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/references/101_REFERENCES_CORE.MD", + "counterpart": "docs/references/001_REFERENCES_CORE.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/secure/001_HMAC_KEY_SETUP.MD", + "counterpart": "docs/secure/101_HMAC_KEY_SETUP.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/secure/101_HMAC_KEY_SETUP.MD", + "counterpart": "docs/secure/001_HMAC_KEY_SETUP.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "counterpart": "docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "counterpart": "docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/specs/001_SPEC_DIN.MD", + "counterpart": "docs/specs/101_SPEC_DIN.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/specs/101_SPEC_DIN.MD", + "counterpart": "docs/specs/001_SPEC_DIN.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/001_INDEX_TESTS.MD", + "counterpart": "docs/verification/101_INDEX_TESTS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/002_FLOW_BDD.MD", + "counterpart": "docs/verification/102_FLOW_BDD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/003_CATALOG_BDD.MD", + "counterpart": "docs/verification/103_CATALOG_BDD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/004_MATRIX_HASHING.MD", + "counterpart": "docs/verification/104_MATRIX_HASHING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/101_INDEX_TESTS.MD", + "counterpart": "docs/verification/001_INDEX_TESTS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/102_FLOW_BDD.MD", + "counterpart": "docs/verification/002_FLOW_BDD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/103_CATALOG_BDD.MD", + "counterpart": "docs/verification/003_CATALOG_BDD.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/verification/104_MATRIX_HASHING.MD", + "counterpart": "docs/verification/004_MATRIX_HASHING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/001_POLICY_VERSIONING.MD", + "counterpart": "docs/versioning/101_POLICY_VERSIONING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/002_HISTORY_VERSIONS.MD", + "counterpart": "docs/versioning/102_HISTORY_VERSIONS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/003_CHANGELOG_RELEASES.MD", + "counterpart": "docs/versioning/103_CHANGELOG_RELEASES.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/004_POLICY_LABELING.MD", + "counterpart": "docs/versioning/104_POLICY_LABELING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/101_POLICY_VERSIONING.MD", + "counterpart": "docs/versioning/001_POLICY_VERSIONING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/102_HISTORY_VERSIONS.MD", + "counterpart": "docs/versioning/002_HISTORY_VERSIONS.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/103_CHANGELOG_RELEASES.MD", + "counterpart": "docs/versioning/003_CHANGELOG_RELEASES.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + }, + { + "file": "docs/versioning/104_POLICY_LABELING.MD", + "counterpart": "docs/versioning/004_POLICY_LABELING.MD", + "source": "schema", + "status": "ok", + "counterpart_exists": true + } + ] +} diff --git a/docs/lang_switch_report.md b/docs/lang_switch_report.md new file mode 100644 index 0000000..6ae68c3 --- /dev/null +++ b/docs/lang_switch_report.md @@ -0,0 +1,118 @@ + +[DE](lang_switch_report.md) | [EN](lang_switch_report.md) + + +# Language Switch Report + +## Summary +- Total files: 102 +- Changed files: 102 +- OK: 102 +- Missing counterpart: 0 +- Needs map: 0 + +## Records +| File | Counterpart | Source | Status | +| --- | --- | --- | --- | +| `docs/001_INDEX_CORE.MD` | `docs/101_INDEX_CORE.MD` | `schema` | `ok` | +| `docs/010_API_CORE.MD` | `docs/110_API_CORE.MD` | `schema` | `ok` | +| `docs/020_ARCH_CORE.MD` | `docs/120_ARCH_CORE.MD` | `schema` | `ok` | +| `docs/021_USAGE_NUGET.MD` | `docs/121_USAGE_NUGET.MD` | `schema` | `ok` | +| `docs/101_INDEX_CORE.MD` | `docs/001_INDEX_CORE.MD` | `schema` | `ok` | +| `docs/110_API_CORE.MD` | `docs/010_API_CORE.MD` | `schema` | `ok` | +| `docs/120_ARCH_CORE.MD` | `docs/020_ARCH_CORE.MD` | `schema` | `ok` | +| `docs/121_USAGE_NUGET.MD` | `docs/021_USAGE_NUGET.MD` | `schema` | `ok` | +| `docs/audit/000_HASHING_BASELINE.MD` | `docs/audit/100_HASHING_BASELINE.MD` | `schema` | `ok` | +| `docs/audit/000_INDEX.MD` | `docs/audit/100_INDEX.MD` | `schema` | `ok` | +| `docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD` | `docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD` | `schema` | `ok` | +| `docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD` | `docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD` | `schema` | `ok` | +| `docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD` | `docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD` | `schema` | `ok` | +| `docs/audit/005_CODE_ANALYSIS_METHOD.MD` | `docs/audit/105_CODE_ANALYSIS_METHOD.MD` | `schema` | `ok` | +| `docs/audit/006_CODE_REVIEW_FINDINGS.MD` | `docs/audit/106_CODE_REVIEW_FINDINGS.MD` | `schema` | `ok` | +| `docs/audit/007_THREAT_MODEL.MD` | `docs/audit/107_THREAT_MODEL.MD` | `schema` | `ok` | +| `docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD` | `docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD` | `schema` | `ok` | +| `docs/audit/009_SUPPLY_CHAIN_BASELINE.MD` | `docs/audit/109_SUPPLY_CHAIN_BASELINE.MD` | `schema` | `ok` | +| `docs/audit/010_REFACTOR_BACKLOG.MD` | `docs/audit/110_REFACTOR_BACKLOG.MD` | `schema` | `ok` | +| `docs/audit/011_SECURITY_BENCHMARK.MD` | `docs/audit/111_SECURITY_BENCHMARK.MD` | `schema` | `ok` | +| `docs/audit/012_WAVE_EXECUTION_DOD.MD` | `docs/audit/112_WAVE_EXECUTION_DOD.MD` | `schema` | `ok` | +| `docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD` | `docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD` | `schema` | `ok` | +| `docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD` | `docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD` | `schema` | `ok` | +| `docs/audit/015_DOC_BILINGUAL_MAPPING.MD` | `docs/audit/115_DOC_BILINGUAL_MAPPING.MD` | `schema` | `ok` | +| `docs/audit/100_HASHING_BASELINE.MD` | `docs/audit/000_HASHING_BASELINE.MD` | `schema` | `ok` | +| `docs/audit/100_INDEX.MD` | `docs/audit/000_INDEX.MD` | `schema` | `ok` | +| `docs/audit/102_AUDIT_CONTRACT_AND_GUARDRAILS.MD` | `docs/audit/002_AUDIT_CONTRACT_AND_GUARDRAILS.MD` | `schema` | `ok` | +| `docs/audit/103_SECURITY_ASSERTION_TRACEABILITY.MD` | `docs/audit/003_SECURITY_ASSERTION_TRACEABILITY.MD` | `schema` | `ok` | +| `docs/audit/104_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD` | `docs/audit/004_CERTIFICATION_AND_ATTESTATION_ROADMAP.MD` | `schema` | `ok` | +| `docs/audit/105_CODE_ANALYSIS_METHOD.MD` | `docs/audit/005_CODE_ANALYSIS_METHOD.MD` | `schema` | `ok` | +| `docs/audit/106_CODE_REVIEW_FINDINGS.MD` | `docs/audit/006_CODE_REVIEW_FINDINGS.MD` | `schema` | `ok` | +| `docs/audit/107_THREAT_MODEL.MD` | `docs/audit/007_THREAT_MODEL.MD` | `schema` | `ok` | +| `docs/audit/108_INCIDENT_RESPONSE_RUNBOOK.MD` | `docs/audit/008_INCIDENT_RESPONSE_RUNBOOK.MD` | `schema` | `ok` | +| `docs/audit/109_SUPPLY_CHAIN_BASELINE.MD` | `docs/audit/009_SUPPLY_CHAIN_BASELINE.MD` | `schema` | `ok` | +| `docs/audit/110_REFACTOR_BACKLOG.MD` | `docs/audit/010_REFACTOR_BACKLOG.MD` | `schema` | `ok` | +| `docs/audit/111_SECURITY_BENCHMARK.MD` | `docs/audit/011_SECURITY_BENCHMARK.MD` | `schema` | `ok` | +| `docs/audit/112_WAVE_EXECUTION_DOD.MD` | `docs/audit/012_WAVE_EXECUTION_DOD.MD` | `schema` | `ok` | +| `docs/audit/113_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD` | `docs/audit/013_SCORECARD_GOVERNANCE_ALERT_MAPPING.MD` | `schema` | `ok` | +| `docs/audit/114_EVIDENCE_REPORT_ISSUE_67.MD` | `docs/audit/014_EVIDENCE_REPORT_ISSUE_67.MD` | `schema` | `ok` | +| `docs/audit/115_DOC_BILINGUAL_MAPPING.MD` | `docs/audit/015_DOC_BILINGUAL_MAPPING.MD` | `schema` | `ok` | +| `docs/ci/001_PIPELINE_CI.MD` | `docs/ci/101_PIPELINE_CI.MD` | `schema` | `ok` | +| `docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD` | `docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD` | `schema` | `ok` | +| `docs/ci/101_PIPELINE_CI.MD` | `docs/ci/001_PIPELINE_CI.MD` | `schema` | `ok` | +| `docs/ci/102_NUGET_TRUSTED_PUBLISHING.MD` | `docs/ci/002_NUGET_TRUSTED_PUBLISHING.MD` | `schema` | `ok` | +| `docs/contracts/001_CONTRACT_HASHING.MD` | `docs/contracts/101_CONTRACT_HASHING.MD` | `schema` | `ok` | +| `docs/contracts/101_CONTRACT_HASHING.MD` | `docs/contracts/001_CONTRACT_HASHING.MD` | `schema` | `ok` | +| `docs/governance/001_POLICY_CI.MD` | `docs/governance/101_POLICY_CI.MD` | `schema` | `ok` | +| `docs/governance/002_POLICY_LABELING.MD` | `docs/governance/102_POLICY_LABELING.MD` | `schema` | `ok` | +| `docs/governance/002_POLICY_NAMING_UNIFIED.MD` | `docs/governance/102_POLICY_NAMING_UNIFIED.MD` | `schema` | `ok` | +| `docs/governance/003_INDEX_GOVERNANCE.MD` | `docs/governance/103_INDEX_GOVERNANCE.MD` | `schema` | `ok` | +| `docs/governance/003_POLICY_VERSIONING_SVT.MD` | `docs/governance/103_POLICY_VERSIONING_SVT.MD` | `schema` | `ok` | +| `docs/governance/004_POLICY_DOCUMENTATION.MD` | `docs/governance/104_POLICY_DOCUMENTATION.MD` | `schema` | `ok` | +| `docs/governance/005_POLICY_NAMING.MD` | `docs/governance/105_POLICY_NAMING.MD` | `schema` | `ok` | +| `docs/governance/006_INDEX_CI_RULES.MD` | `docs/governance/106_INDEX_CI_RULES.MD` | `schema` | `ok` | +| `docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD` | `docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD` | `schema` | `ok` | +| `docs/governance/101_POLICY_CI.MD` | `docs/governance/001_POLICY_CI.MD` | `schema` | `ok` | +| `docs/governance/102_POLICY_LABELING.MD` | `docs/governance/002_POLICY_LABELING.MD` | `schema` | `ok` | +| `docs/governance/102_POLICY_NAMING_UNIFIED.MD` | `docs/governance/002_POLICY_NAMING_UNIFIED.MD` | `schema` | `ok` | +| `docs/governance/103_INDEX_GOVERNANCE.MD` | `docs/governance/003_INDEX_GOVERNANCE.MD` | `schema` | `ok` | +| `docs/governance/103_POLICY_VERSIONING_SVT.MD` | `docs/governance/003_POLICY_VERSIONING_SVT.MD` | `schema` | `ok` | +| `docs/governance/104_POLICY_DOCUMENTATION.MD` | `docs/governance/004_POLICY_DOCUMENTATION.MD` | `schema` | `ok` | +| `docs/governance/105_POLICY_NAMING.MD` | `docs/governance/005_POLICY_NAMING.MD` | `schema` | `ok` | +| `docs/governance/106_INDEX_CI_RULES.MD` | `docs/governance/006_INDEX_CI_RULES.MD` | `schema` | `ok` | +| `docs/governance/107_POLICY_BRANCH_PR_NAMING_DE.MD` | `docs/governance/007_POLICY_BRANCH_PR_NAMING_DE.MD` | `schema` | `ok` | +| `docs/guides/000_INDEX_GUIDES.MD` | `docs/guides/100_INDEX_GUIDES.MD` | `schema` | `ok` | +| `docs/guides/001_GUIDE_OPTIONS.MD` | `docs/guides/101_GUIDE_OPTIONS.MD` | `schema` | `ok` | +| `docs/guides/002_GUIDE_DATATYPE.MD` | `docs/guides/102_GUIDE_DATATYPE.MD` | `schema` | `ok` | +| `docs/guides/003_GUIDE_PORTABLE.MD` | `docs/guides/103_GUIDE_PORTABLE.MD` | `schema` | `ok` | +| `docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD` | `docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD` | `schema` | `ok` | +| `docs/guides/100_INDEX_GUIDES.MD` | `docs/guides/000_INDEX_GUIDES.MD` | `schema` | `ok` | +| `docs/guides/101_GUIDE_OPTIONS.MD` | `docs/guides/001_GUIDE_OPTIONS.MD` | `schema` | `ok` | +| `docs/guides/102_GUIDE_DATATYPE.MD` | `docs/guides/002_GUIDE_DATATYPE.MD` | `schema` | `ok` | +| `docs/guides/103_GUIDE_PORTABLE.MD` | `docs/guides/003_GUIDE_PORTABLE.MD` | `schema` | `ok` | +| `docs/guides/104_GUIDE_MIGRATE_LEGACY_NUGET.MD` | `docs/guides/004_GUIDE_MIGRATE_LEGACY_NUGET.MD` | `schema` | `ok` | +| `docs/migrations/001_HASHING_RENAME.MD` | `docs/migrations/101_HASHING_RENAME.MD` | `schema` | `ok` | +| `docs/migrations/101_HASHING_RENAME.MD` | `docs/migrations/001_HASHING_RENAME.MD` | `schema` | `ok` | +| `docs/quality/001_CHECKLIST_PRODUCTION.MD` | `docs/quality/101_CHECKLIST_PRODUCTION.MD` | `schema` | `ok` | +| `docs/quality/101_CHECKLIST_PRODUCTION.MD` | `docs/quality/001_CHECKLIST_PRODUCTION.MD` | `schema` | `ok` | +| `docs/references/001_REFERENCES_CORE.MD` | `docs/references/101_REFERENCES_CORE.MD` | `schema` | `ok` | +| `docs/references/101_REFERENCES_CORE.MD` | `docs/references/001_REFERENCES_CORE.MD` | `schema` | `ok` | +| `docs/secure/001_HMAC_KEY_SETUP.MD` | `docs/secure/101_HMAC_KEY_SETUP.MD` | `schema` | `ok` | +| `docs/secure/101_HMAC_KEY_SETUP.MD` | `docs/secure/001_HMAC_KEY_SETUP.MD` | `schema` | `ok` | +| `docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD` | `docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD` | `schema` | `ok` | +| `docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD` | `docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD` | `schema` | `ok` | +| `docs/specs/001_SPEC_DIN.MD` | `docs/specs/101_SPEC_DIN.MD` | `schema` | `ok` | +| `docs/specs/101_SPEC_DIN.MD` | `docs/specs/001_SPEC_DIN.MD` | `schema` | `ok` | +| `docs/verification/001_INDEX_TESTS.MD` | `docs/verification/101_INDEX_TESTS.MD` | `schema` | `ok` | +| `docs/verification/002_FLOW_BDD.MD` | `docs/verification/102_FLOW_BDD.MD` | `schema` | `ok` | +| `docs/verification/003_CATALOG_BDD.MD` | `docs/verification/103_CATALOG_BDD.MD` | `schema` | `ok` | +| `docs/verification/004_MATRIX_HASHING.MD` | `docs/verification/104_MATRIX_HASHING.MD` | `schema` | `ok` | +| `docs/verification/101_INDEX_TESTS.MD` | `docs/verification/001_INDEX_TESTS.MD` | `schema` | `ok` | +| `docs/verification/102_FLOW_BDD.MD` | `docs/verification/002_FLOW_BDD.MD` | `schema` | `ok` | +| `docs/verification/103_CATALOG_BDD.MD` | `docs/verification/003_CATALOG_BDD.MD` | `schema` | `ok` | +| `docs/verification/104_MATRIX_HASHING.MD` | `docs/verification/004_MATRIX_HASHING.MD` | `schema` | `ok` | +| `docs/versioning/001_POLICY_VERSIONING.MD` | `docs/versioning/101_POLICY_VERSIONING.MD` | `schema` | `ok` | +| `docs/versioning/002_HISTORY_VERSIONS.MD` | `docs/versioning/102_HISTORY_VERSIONS.MD` | `schema` | `ok` | +| `docs/versioning/003_CHANGELOG_RELEASES.MD` | `docs/versioning/103_CHANGELOG_RELEASES.MD` | `schema` | `ok` | +| `docs/versioning/004_POLICY_LABELING.MD` | `docs/versioning/104_POLICY_LABELING.MD` | `schema` | `ok` | +| `docs/versioning/101_POLICY_VERSIONING.MD` | `docs/versioning/001_POLICY_VERSIONING.MD` | `schema` | `ok` | +| `docs/versioning/102_HISTORY_VERSIONS.MD` | `docs/versioning/002_HISTORY_VERSIONS.MD` | `schema` | `ok` | +| `docs/versioning/103_CHANGELOG_RELEASES.MD` | `docs/versioning/003_CHANGELOG_RELEASES.MD` | `schema` | `ok` | +| `docs/versioning/104_POLICY_LABELING.MD` | `docs/versioning/004_POLICY_LABELING.MD` | `schema` | `ok` | diff --git a/docs/migrations/001_HASHING_RENAME.MD b/docs/migrations/001_HASHING_RENAME.MD index c48e5f5..4a21a68 100644 --- a/docs/migrations/001_HASHING_RENAME.MD +++ b/docs/migrations/001_HASHING_RENAME.MD @@ -1,3 +1,7 @@ + +[DE](001_HASHING_RENAME.MD) | [EN](101_HASHING_RENAME.MD) + + # Migration: Hashing-Rename (Deterministic* -> Evidence/Hash*) ## Zweck und Scope diff --git a/docs/migrations/101_HASHING_RENAME.MD b/docs/migrations/101_HASHING_RENAME.MD index 94af352..ac51c71 100644 --- a/docs/migrations/101_HASHING_RENAME.MD +++ b/docs/migrations/101_HASHING_RENAME.MD @@ -1,3 +1,7 @@ + +[DE](001_HASHING_RENAME.MD) | [EN](101_HASHING_RENAME.MD) + + # Migration: Hashing Rename (Deterministic* -> Evidence/Hash*) ## Scope diff --git a/docs/quality/001_CHECKLIST_PRODUCTION.MD b/docs/quality/001_CHECKLIST_PRODUCTION.MD index f28be6b..848801a 100644 --- a/docs/quality/001_CHECKLIST_PRODUCTION.MD +++ b/docs/quality/001_CHECKLIST_PRODUCTION.MD @@ -1,3 +1,7 @@ + +[DE](001_CHECKLIST_PRODUCTION.MD) | [EN](101_CHECKLIST_PRODUCTION.MD) + + # Production-Readiness-Checkliste - FileTypeDetection ## 1. Build- und Test-Gate diff --git a/docs/quality/101_CHECKLIST_PRODUCTION.MD b/docs/quality/101_CHECKLIST_PRODUCTION.MD index 5846898..61e315e 100644 --- a/docs/quality/101_CHECKLIST_PRODUCTION.MD +++ b/docs/quality/101_CHECKLIST_PRODUCTION.MD @@ -1,3 +1,7 @@ + +[DE](001_CHECKLIST_PRODUCTION.MD) | [EN](101_CHECKLIST_PRODUCTION.MD) + + # Production Readiness Checklist - FileTypeDetection ## 1. Build and Test Gate diff --git a/docs/references/001_REFERENCES_CORE.MD b/docs/references/001_REFERENCES_CORE.MD index 61c82fc..24037f2 100644 --- a/docs/references/001_REFERENCES_CORE.MD +++ b/docs/references/001_REFERENCES_CORE.MD @@ -1,3 +1,7 @@ + +[DE](001_REFERENCES_CORE.MD) | [EN](101_REFERENCES_CORE.MD) + + # 03 - Referenzen ## 1. Zweck & Scope diff --git a/docs/references/101_REFERENCES_CORE.MD b/docs/references/101_REFERENCES_CORE.MD index 956564c..d5981b0 100644 --- a/docs/references/101_REFERENCES_CORE.MD +++ b/docs/references/101_REFERENCES_CORE.MD @@ -1,3 +1,7 @@ + +[DE](001_REFERENCES_CORE.MD) | [EN](101_REFERENCES_CORE.MD) + + # 03 - References ## 1. Purpose & Scope diff --git a/docs/secure/001_HMAC_KEY_SETUP.MD b/docs/secure/001_HMAC_KEY_SETUP.MD index 2e18238..966b26d 100644 --- a/docs/secure/001_HMAC_KEY_SETUP.MD +++ b/docs/secure/001_HMAC_KEY_SETUP.MD @@ -1,3 +1,7 @@ + +[DE](001_HMAC_KEY_SETUP.MD) | [EN](101_HMAC_KEY_SETUP.MD) + + # HMAC-Key Setup (FILECLASSIFIER_HMAC_KEY_B64) ## Zweck diff --git a/docs/secure/101_HMAC_KEY_SETUP.MD b/docs/secure/101_HMAC_KEY_SETUP.MD index fe2bdad..38fbac5 100644 --- a/docs/secure/101_HMAC_KEY_SETUP.MD +++ b/docs/secure/101_HMAC_KEY_SETUP.MD @@ -1,3 +1,7 @@ + +[DE](001_HMAC_KEY_SETUP.MD) | [EN](101_HMAC_KEY_SETUP.MD) + + # HMAC Key Setup (FILECLASSIFIER_HMAC_KEY_B64) ## Purpose diff --git a/docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD b/docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD index 9ac1f64..8a0ed13 100644 --- a/docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD +++ b/docs/security/010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD @@ -1,3 +1,7 @@ + +[DE](010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD) | [EN](110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD) + + # CodeQL Default Setup Guardrail ## Ziel diff --git a/docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD b/docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD index 9cead13..628d0dd 100644 --- a/docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD +++ b/docs/security/110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD @@ -1,3 +1,7 @@ + +[DE](010_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD) | [EN](110_CODEQL_DEFAULT_SETUP_GUARDRAIL.MD) + + # CodeQL Default Setup Guardrail ## Purpose diff --git a/docs/specs/001_SPEC_DIN.MD b/docs/specs/001_SPEC_DIN.MD index aa20dbc..7a36993 100644 --- a/docs/specs/001_SPEC_DIN.MD +++ b/docs/specs/001_SPEC_DIN.MD @@ -1,3 +1,7 @@ + +[DE](001_SPEC_DIN.MD) | [EN](101_SPEC_DIN.MD) + + # DIN-orientierte Spezifikation (DE) - FileTypeDetection ## 1. Dokumentenlenkung diff --git a/docs/specs/101_SPEC_DIN.MD b/docs/specs/101_SPEC_DIN.MD index de2f94b..7000bf8 100644 --- a/docs/specs/101_SPEC_DIN.MD +++ b/docs/specs/101_SPEC_DIN.MD @@ -1,3 +1,7 @@ + +[DE](001_SPEC_DIN.MD) | [EN](101_SPEC_DIN.MD) + + # DIN-oriented Specification (EN) - FileTypeDetection ## 1. Document control diff --git a/docs/verification/001_INDEX_TESTS.MD b/docs/verification/001_INDEX_TESTS.MD index 70c63b9..28e804e 100644 --- a/docs/verification/001_INDEX_TESTS.MD +++ b/docs/verification/001_INDEX_TESTS.MD @@ -1,3 +1,7 @@ + +[DE](001_INDEX_TESTS.MD) | [EN](101_INDEX_TESTS.MD) + + # Testdokumentation (BDD) ## 1. Zweck diff --git a/docs/verification/002_FLOW_BDD.MD b/docs/verification/002_FLOW_BDD.MD index 0ae8590..6325811 100644 --- a/docs/verification/002_FLOW_BDD.MD +++ b/docs/verification/002_FLOW_BDD.MD @@ -1,3 +1,7 @@ + +[DE](002_FLOW_BDD.MD) | [EN](102_FLOW_BDD.MD) + + # BDD-Ausfuehrung und Gherkin-Flow ## 1. Zweck diff --git a/docs/verification/003_CATALOG_BDD.MD b/docs/verification/003_CATALOG_BDD.MD index 52f05dc..03c8777 100644 --- a/docs/verification/003_CATALOG_BDD.MD +++ b/docs/verification/003_CATALOG_BDD.MD @@ -1,3 +1,7 @@ + +[DE](003_CATALOG_BDD.MD) | [EN](103_CATALOG_BDD.MD) + + # BDD-Satzkatalog (Deutsch, kanonisch) ## 1. Zweck diff --git a/docs/verification/004_MATRIX_HASHING.MD b/docs/verification/004_MATRIX_HASHING.MD index e314fe9..de41d77 100644 --- a/docs/verification/004_MATRIX_HASHING.MD +++ b/docs/verification/004_MATRIX_HASHING.MD @@ -1,3 +1,7 @@ + +[DE](004_MATRIX_HASHING.MD) | [EN](104_MATRIX_HASHING.MD) + + # Test Matrix - Deterministic Hashing ## 1. Zweck & Scope diff --git a/docs/verification/101_INDEX_TESTS.MD b/docs/verification/101_INDEX_TESTS.MD index 4f9ebfe..05ac238 100644 --- a/docs/verification/101_INDEX_TESTS.MD +++ b/docs/verification/101_INDEX_TESTS.MD @@ -1,3 +1,7 @@ + +[DE](001_INDEX_TESTS.MD) | [EN](101_INDEX_TESTS.MD) + + # Test Documentation (BDD) ## 1. Purpose diff --git a/docs/verification/102_FLOW_BDD.MD b/docs/verification/102_FLOW_BDD.MD index ebb6382..5d1c36d 100644 --- a/docs/verification/102_FLOW_BDD.MD +++ b/docs/verification/102_FLOW_BDD.MD @@ -1,3 +1,7 @@ + +[DE](002_FLOW_BDD.MD) | [EN](102_FLOW_BDD.MD) + + # BDD Execution and Gherkin Flow ## 1. Purpose diff --git a/docs/verification/103_CATALOG_BDD.MD b/docs/verification/103_CATALOG_BDD.MD index 8838449..5f3fa3c 100644 --- a/docs/verification/103_CATALOG_BDD.MD +++ b/docs/verification/103_CATALOG_BDD.MD @@ -1,3 +1,7 @@ + +[DE](003_CATALOG_BDD.MD) | [EN](103_CATALOG_BDD.MD) + + # BDD Sentence Catalog (German, canonical) ## 1. Purpose diff --git a/docs/verification/104_MATRIX_HASHING.MD b/docs/verification/104_MATRIX_HASHING.MD index 7cbd35e..d5677c9 100644 --- a/docs/verification/104_MATRIX_HASHING.MD +++ b/docs/verification/104_MATRIX_HASHING.MD @@ -1,3 +1,7 @@ + +[DE](004_MATRIX_HASHING.MD) | [EN](104_MATRIX_HASHING.MD) + + # Test Matrix - Deterministic Hashing ## 1. Purpose & Scope diff --git a/docs/versioning/001_POLICY_VERSIONING.MD b/docs/versioning/001_POLICY_VERSIONING.MD index f1054c7..ae3ff18 100644 --- a/docs/versioning/001_POLICY_VERSIONING.MD +++ b/docs/versioning/001_POLICY_VERSIONING.MD @@ -1,3 +1,7 @@ + +[DE](001_POLICY_VERSIONING.MD) | [EN](101_POLICY_VERSIONING.MD) + + # Versionierungs- und Release-Policy (SSOT) ## 1. Zweck diff --git a/docs/versioning/002_HISTORY_VERSIONS.MD b/docs/versioning/002_HISTORY_VERSIONS.MD index f84286c..09a6e53 100644 --- a/docs/versioning/002_HISTORY_VERSIONS.MD +++ b/docs/versioning/002_HISTORY_VERSIONS.MD @@ -1,3 +1,7 @@ + +[DE](002_HISTORY_VERSIONS.MD) | [EN](102_HISTORY_VERSIONS.MD) + + # Versionslinie (Commit → Version) Diese Tabelle wurde aus der Commit-Historie anhand der Policy in diff --git a/docs/versioning/003_CHANGELOG_RELEASES.MD b/docs/versioning/003_CHANGELOG_RELEASES.MD index 67d8a25..6dc3c32 100644 --- a/docs/versioning/003_CHANGELOG_RELEASES.MD +++ b/docs/versioning/003_CHANGELOG_RELEASES.MD @@ -1,3 +1,7 @@ + +[DE](003_CHANGELOG_RELEASES.MD) | [EN](103_CHANGELOG_RELEASES.MD) + + # Changelog Alle Aenderungen werden hier technisch dokumentiert. Die Release-Version selbst ist diff --git a/docs/versioning/004_POLICY_LABELING.MD b/docs/versioning/004_POLICY_LABELING.MD index a8095bb..74fb194 100644 --- a/docs/versioning/004_POLICY_LABELING.MD +++ b/docs/versioning/004_POLICY_LABELING.MD @@ -1,3 +1,7 @@ + +[DE](004_POLICY_LABELING.MD) | [EN](104_POLICY_LABELING.MD) + + # Auto-Labeling und Auto-Versionierung (SSOT) ## 1. Zweck diff --git a/docs/versioning/101_POLICY_VERSIONING.MD b/docs/versioning/101_POLICY_VERSIONING.MD index 662f7ea..7d574a7 100644 --- a/docs/versioning/101_POLICY_VERSIONING.MD +++ b/docs/versioning/101_POLICY_VERSIONING.MD @@ -1,3 +1,7 @@ + +[DE](001_POLICY_VERSIONING.MD) | [EN](101_POLICY_VERSIONING.MD) + + # Versioning and Release Policy (SSOT) ## 1. Purpose diff --git a/docs/versioning/102_HISTORY_VERSIONS.MD b/docs/versioning/102_HISTORY_VERSIONS.MD index a2f7d0d..3e55f39 100644 --- a/docs/versioning/102_HISTORY_VERSIONS.MD +++ b/docs/versioning/102_HISTORY_VERSIONS.MD @@ -1,3 +1,7 @@ + +[DE](002_HISTORY_VERSIONS.MD) | [EN](102_HISTORY_VERSIONS.MD) + + # Version Line (Commit -> Version) This table is derived from the commit history based on the policy in diff --git a/docs/versioning/103_CHANGELOG_RELEASES.MD b/docs/versioning/103_CHANGELOG_RELEASES.MD index 921a98e..6c8abc4 100644 --- a/docs/versioning/103_CHANGELOG_RELEASES.MD +++ b/docs/versioning/103_CHANGELOG_RELEASES.MD @@ -1,3 +1,7 @@ + +[DE](003_CHANGELOG_RELEASES.MD) | [EN](103_CHANGELOG_RELEASES.MD) + + # Changelog All changes are documented here in technical terms. The release version itself is the Git tag `vX.Y.Z` (optional `-prerelease`) as SSOT. diff --git a/docs/versioning/104_POLICY_LABELING.MD b/docs/versioning/104_POLICY_LABELING.MD index b4a5cfb..ac0c1bf 100644 --- a/docs/versioning/104_POLICY_LABELING.MD +++ b/docs/versioning/104_POLICY_LABELING.MD @@ -1,3 +1,7 @@ + +[DE](004_POLICY_LABELING.MD) | [EN](104_POLICY_LABELING.MD) + + # Auto Labeling and Auto Versioning (SSOT) ## 1. Purpose diff --git a/tools/check-docs.py b/tools/check-docs.py index 5e6cf86..c251bd7 100755 --- a/tools/check-docs.py +++ b/tools/check-docs.py @@ -20,6 +20,10 @@ RELATIVE_RE = re.compile( r'\]\(\s*(?!https?://|mailto:|#)(?:\.{1,2}/|/|docs/|src/|tests/|tools/|README\.md|[^)]+\.md(?:#[^)]+)?)(?:\s+"[^"]*")?\s*\)' ) +LANG_SWITCH_BLOCK_RE = re.compile( + r"\r?\n.*?\r?\n", + re.DOTALL, +) PATH_TEXT_RE = re.compile(r'(?i)^\s*(?:\.{1,2}/|/)?(?:[A-Za-z0-9_.-]+/)+[A-Za-z0-9_.-]+\s*$') FILE_TEXT_RE = re.compile(r'(?i)^\s*[A-Za-z0-9_.-]+\.(md|mdx|vb|cs|fs|java|kt|ts|js|json|yml|yaml|toml|xml|sh|ps1|sql)\s*$') INTERNAL_REPO_URL_RE = re.compile( @@ -69,6 +73,7 @@ def collect_targets() -> list[Path]: def check_docs_naming() -> list[str]: errors: list[str] = [] + allowed_lowercase_docs = {"lang_switch_report.md"} for f in sorted(DOCS_DIR.rglob("*")): if not f.is_file(): continue @@ -78,6 +83,8 @@ def check_docs_naming() -> list[str]: errors.append(f"docs contains forbidden README: {f.relative_to(ROOT)}") continue if f.suffix != ".MD": + if f.name in allowed_lowercase_docs: + continue errors.append(f"docs markdown must be uppercase .MD: {f.relative_to(ROOT)}") continue if not DOC_NAME_RE.match(f.name): @@ -251,11 +258,12 @@ def check_links_and_text(files: list[Path]) -> list[str]: for f in files: text = f.read_text(encoding="utf-8") + text_for_link_check = LANG_SWITCH_BLOCK_RE.sub("", text) - if RELATIVE_RE.search(text): + if RELATIVE_RE.search(text_for_link_check): errors.append(f"relative link detected in {f.relative_to(ROOT)}") - for m in LINK_RE.finditer(text): + for m in LINK_RE.finditer(text_for_link_check): ltxt = m.group("text").strip() url = m.group("url").strip() @@ -293,7 +301,7 @@ def check_links_and_text(files: list[Path]) -> list[str]: errors.append(f"non-absolute or unsupported URL in {f.relative_to(ROOT)}: {url}") # Also validate plain URLs in text sections/tables. - for pm in PLAIN_URL_RE.finditer(text): + for pm in PLAIN_URL_RE.finditer(text_for_link_check): raw_url = pm.group("url") cleaned = raw_url.rstrip(".,;:") if cleaned.startswith("mailto:"): diff --git a/tools/lang_switch/update_lang_headers.py b/tools/lang_switch/update_lang_headers.py new file mode 100755 index 0000000..2685f6d --- /dev/null +++ b/tools/lang_switch/update_lang_headers.py @@ -0,0 +1,412 @@ +#!/usr/bin/env python3 +"""Insert or update deterministic DE/EN language switch headers in markdown docs.""" + +from __future__ import annotations + +import argparse +import json +import os +import re +from dataclasses import dataclass +from pathlib import Path +from typing import Dict, List, Optional, Tuple + + +LANG_BEGIN = "" +LANG_END = "" +HEADER_PATTERN = re.compile( + r"(?ms)^\r?\n.*?\r?\n\r?\n?" +) +PREFIX_PATTERN = re.compile(r"^(?P[01])(?P\d{2})_(?P.+)$") +SUFFIX_LANG_PATTERN = re.compile(r"_(?PDE|EN)\.md$", re.IGNORECASE) + + +@dataclass(frozen=True) +class FileRecord: + path: Path + rel_path: str + + +@dataclass +class Resolution: + current: FileRecord + counterpart: Path + source: str + status: str + needs_map: bool + counterpart_exists: bool + de_target: Path + en_target: Path + + +def parse_args() -> argparse.Namespace: + parser = argparse.ArgumentParser( + description="Add/update language switch headers for docs markdown files." + ) + parser.add_argument( + "--repo-root", + default=".", + help="Repository root directory (default: current directory).", + ) + parser.add_argument( + "--docs-dir", + default="docs", + help="Documentation directory relative to repo root (default: docs).", + ) + parser.add_argument( + "--include-readme", + action="store_true", + help="Also include README*.md files from repository root.", + ) + parser.add_argument( + "--write-report-always", + action="store_true", + help="Always rewrite reports even when no markdown header changed.", + ) + return parser.parse_args() + + +def to_rel(repo_root: Path, path: Path) -> str: + try: + return path.relative_to(repo_root).as_posix() + except ValueError: + return os.path.relpath(path, repo_root).replace(os.sep, "/") + + +def collect_markdown_files( + repo_root: Path, + docs_dir: Path, + include_readme: bool, +) -> List[FileRecord]: + records: List[FileRecord] = [] + + for path in docs_dir.rglob("*"): + if not path.is_file() or path.suffix.lower() != ".md": + continue + if path.name == "lang_switch_report.md": + continue + records.append(FileRecord(path=path, rel_path=to_rel(repo_root, path))) + + if include_readme: + for path in repo_root.glob("README*.md"): + if path.is_file(): + records.append(FileRecord(path=path, rel_path=to_rel(repo_root, path))) + + return sorted(records, key=lambda item: item.rel_path) + + +def load_lang_map(lang_map_path: Path) -> Dict[str, str]: + if not lang_map_path.exists(): + return {} + data = json.loads(lang_map_path.read_text(encoding="utf-8")) + if not isinstance(data, dict): + raise ValueError(f"{lang_map_path} must contain a JSON object.") + normalized: Dict[str, str] = {} + for key, value in data.items(): + if not isinstance(key, str) or not isinstance(value, str): + raise ValueError( + f"{lang_map_path} contains non-string key/value entries: {key!r}:{value!r}" + ) + normalized[key] = value + return normalized + + +def detect_lang(path: Path) -> Optional[str]: + prefix_match = PREFIX_PATTERN.match(path.name) + if prefix_match: + return "DE" if prefix_match.group("prefix") == "0" else "EN" + + suffix_match = SUFFIX_LANG_PATTERN.search(path.name) + if suffix_match: + return suffix_match.group("lang").upper() + return None + + +def schema_counterpart(path: Path) -> Optional[Path]: + match = PREFIX_PATTERN.match(path.name) + if not match: + return None + switched_prefix = "1" if match.group("prefix") == "0" else "0" + counterpart_name = f"{switched_prefix}{match.group('nn')}_{match.group('rest')}" + return path.with_name(counterpart_name) + + +def map_counterpart( + repo_root: Path, rel_path: str, lang_map: Dict[str, str] +) -> Optional[Path]: + mapped = lang_map.get(rel_path) + if not mapped: + return None + mapped_path = (repo_root / mapped).resolve() + return mapped_path + + +def resolve_targets( + current_path: Path, counterpart_path: Path, current_lang: Optional[str], counterpart_lang: Optional[str] +) -> Tuple[Path, Path]: + if current_lang == "DE": + return current_path, counterpart_path + if current_lang == "EN": + return counterpart_path, current_path + if counterpart_lang == "DE": + return counterpart_path, current_path + if counterpart_lang == "EN": + return current_path, counterpart_path + # Fallback for unknown language markers. + return current_path, counterpart_path + + +def resolve_file( + repo_root: Path, + record: FileRecord, + lang_map: Dict[str, str], +) -> Resolution: + schema_target = schema_counterpart(record.path) + source = "schema" + needs_map = False + + if schema_target is not None: + counterpart = schema_target + else: + source = "map" + mapped = map_counterpart(repo_root, record.rel_path, lang_map) + if mapped is None: + needs_map = True + counterpart = record.path + else: + counterpart = mapped + + counterpart_exists = counterpart.exists() and counterpart.is_file() + status = "ok" + if needs_map: + status = "needs_map" + elif not counterpart_exists: + status = "missing_counterpart" + + current_lang = detect_lang(record.path) + counterpart_lang = detect_lang(counterpart) + de_target, en_target = resolve_targets( + current_path=record.path, + counterpart_path=counterpart, + current_lang=current_lang, + counterpart_lang=counterpart_lang, + ) + + return Resolution( + current=record, + counterpart=counterpart, + source=source, + status=status, + needs_map=needs_map, + counterpart_exists=counterpart_exists, + de_target=de_target, + en_target=en_target, + ) + + +def make_relative_link(from_file: Path, to_file: Path) -> str: + rel = os.path.relpath(to_file, from_file.parent) + return rel.replace(os.sep, "/") + + +def build_header(from_file: Path, de_target: Path, en_target: Path, newline: str) -> str: + rel_de = make_relative_link(from_file, de_target) + rel_en = make_relative_link(from_file, en_target) + return ( + f"{LANG_BEGIN}{newline}" + f"[DE]({rel_de}) | [EN]({rel_en}){newline}" + f"{LANG_END}" + ) + + +def normalize_with_header(path: Path, de_target: Path, en_target: Path) -> Tuple[str, bool]: + original = path.read_text(encoding="utf-8") + newline = "\r\n" if "\r\n" in original else "\n" + header = build_header(path, de_target, en_target, newline) + + body = HEADER_PATTERN.sub("", original) + body = re.sub(r"^(?:\r?\n)+", "", body) + if body: + updated = f"{header}{newline}{newline}{body}" + else: + updated = f"{header}{newline}" + + return updated, updated != original + + +def write_lang_map_if_needed( + lang_map_path: Path, + lang_map: Dict[str, str], + missing_map_keys: List[str], +) -> bool: + if not missing_map_keys and not lang_map_path.exists(): + return False + + changed = False + for key in missing_map_keys: + if key not in lang_map: + lang_map[key] = "" + changed = True + + if changed or not lang_map_path.exists(): + lang_map_path.parent.mkdir(parents=True, exist_ok=True) + serialized = json.dumps(dict(sorted(lang_map.items())), indent=2, ensure_ascii=True) + lang_map_path.write_text(f"{serialized}\n", encoding="utf-8") + return True + return False + + +def report_payload(repo_root: Path, resolutions: List[Resolution], changed_files: List[str]) -> Dict[str, object]: + ok = [r for r in resolutions if r.status == "ok"] + missing = [r for r in resolutions if r.status == "missing_counterpart"] + needs_map = [r for r in resolutions if r.status == "needs_map"] + + records = [] + for item in resolutions: + records.append( + { + "file": item.current.rel_path, + "counterpart": to_rel(repo_root, item.counterpart), + "source": item.source, + "status": item.status, + "counterpart_exists": item.counterpart_exists, + } + ) + + return { + "summary": { + "total_files": len(resolutions), + "changed_files": len(changed_files), + "ok": len(ok), + "missing_counterpart": len(missing), + "needs_map": len(needs_map), + }, + "changed_files": changed_files, + "ok": [item.current.rel_path for item in ok], + "missing_counterpart": [item.current.rel_path for item in missing], + "needs_map": [item.current.rel_path for item in needs_map], + "records": records, + } + + +def markdown_report( + repo_root: Path, + payload: Dict[str, object], + report_md_path: Path, +) -> str: + summary = payload["summary"] + records = payload["records"] + + header = build_header(report_md_path, report_md_path, report_md_path, "\n") + lines = [ + header, + "", + "# Language Switch Report", + "", + "## Summary", + f"- Total files: {summary['total_files']}", + f"- Changed files: {summary['changed_files']}", + f"- OK: {summary['ok']}", + f"- Missing counterpart: {summary['missing_counterpart']}", + f"- Needs map: {summary['needs_map']}", + "", + "## Records", + "| File | Counterpart | Source | Status |", + "| --- | --- | --- | --- |", + ] + for record in records: + lines.append( + f"| `{record['file']}` | `{record['counterpart']}` | `{record['source']}` | `{record['status']}` |" + ) + + return "\n".join(lines) + "\n" + + +def write_reports( + repo_root: Path, + payload: Dict[str, object], + report_md_path: Path, + report_json_path: Path, +) -> None: + report_md_path.parent.mkdir(parents=True, exist_ok=True) + report_json_path.parent.mkdir(parents=True, exist_ok=True) + report_json_path.write_text( + json.dumps(payload, indent=2, ensure_ascii=True) + "\n", encoding="utf-8" + ) + report_md_path.write_text( + markdown_report(repo_root, payload, report_md_path), encoding="utf-8" + ) + + +def main() -> int: + args = parse_args() + repo_root = Path(args.repo_root).resolve() + docs_dir = (repo_root / args.docs_dir).resolve() + lang_map_path = (docs_dir / "lang_map.json").resolve() + report_md_path = (docs_dir / "lang_switch_report.md").resolve() + report_json_path = (docs_dir / "lang_switch_report.json").resolve() + + if not docs_dir.exists() or not docs_dir.is_dir(): + raise SystemExit(f"Documentation directory not found: {docs_dir}") + + files = collect_markdown_files( + repo_root=repo_root, docs_dir=docs_dir, include_readme=args.include_readme + ) + lang_map = load_lang_map(lang_map_path) + + resolutions: List[Resolution] = [] + changed_files: List[str] = [] + missing_map_keys: List[str] = [] + + for record in files: + resolution = resolve_file(repo_root=repo_root, record=record, lang_map=lang_map) + resolutions.append(resolution) + + if resolution.needs_map: + missing_map_keys.append(record.rel_path) + + updated, changed = normalize_with_header( + path=record.path, + de_target=resolution.de_target, + en_target=resolution.en_target, + ) + if changed: + record.path.write_text(updated, encoding="utf-8") + changed_files.append(record.rel_path) + + map_changed = write_lang_map_if_needed(lang_map_path, lang_map, sorted(set(missing_map_keys))) + payload = report_payload(repo_root=repo_root, resolutions=resolutions, changed_files=changed_files) + + report_exists = report_md_path.exists() and report_json_path.exists() + should_write_report = ( + bool(changed_files) + or map_changed + or args.write_report_always + or not report_exists + ) + + if should_write_report: + write_reports( + repo_root=repo_root, + payload=payload, + report_md_path=report_md_path, + report_json_path=report_json_path, + ) + + print( + json.dumps( + { + "total_files": len(files), + "changed_files": len(changed_files), + "missing_counterpart": payload["summary"]["missing_counterpart"], + "needs_map": payload["summary"]["needs_map"], + "report_written": should_write_report, + }, + ensure_ascii=True, + ) + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main())