Log map-file errors instead of breaking

Change-Id: I689e2cff9c0d4e0d628331dfbfd2683f023f9205
diff --git a/config/config.go b/config/config.go
index 1176876..12b934d 100644
--- a/config/config.go
+++ b/config/config.go
@@ -6,6 +6,7 @@
 
 	"github.com/KorAP/KoralPipe-TermMapper/ast"
 	"github.com/KorAP/KoralPipe-TermMapper/parser"
+	"github.com/rs/zerolog/log"
 	"gopkg.in/yaml.v3"
 )
 
@@ -96,20 +97,24 @@
 	for _, file := range mappingFiles {
 		data, err := os.ReadFile(file)
 		if err != nil {
-			return nil, fmt.Errorf("failed to read mapping file '%s': %w", file, err)
+			log.Error().Err(err).Str("file", file).Msg("Failed to read mapping file")
+			continue
 		}
 
 		if len(data) == 0 {
-			return nil, fmt.Errorf("EOF: mapping file '%s' is empty", file)
+			log.Error().Err(err).Str("file", file).Msg("EOF: mapping file is empty")
+			continue
 		}
 
 		var list MappingList
 		if err := yaml.Unmarshal(data, &list); err != nil {
-			return nil, fmt.Errorf("failed to parse YAML mapping file '%s': %w", file, err)
+			log.Error().Err(err).Str("file", file).Msg("Failed to parse YAML mapping file")
+			continue
 		}
 
 		if seenIDs[list.ID] {
-			return nil, fmt.Errorf("duplicate mapping list ID found: %s", list.ID)
+			log.Error().Err(err).Str("file", file).Str("list-id", list.ID).Msg("Duplicate mapping list ID found")
+			continue
 		}
 		seenIDs[list.ID] = true
 		allLists = append(allLists, list)
diff --git a/config/config_test.go b/config/config_test.go
index 329712c..706e1e6 100644
--- a/config/config_test.go
+++ b/config/config_test.go
@@ -1,10 +1,12 @@
 package config
 
 import (
+	"bytes"
 	"os"
 	"testing"
 
 	"github.com/KorAP/KoralPipe-TermMapper/ast"
+	"github.com/rs/zerolog/log"
 	"github.com/stretchr/testify/assert"
 	"github.com/stretchr/testify/require"
 )
@@ -763,6 +765,14 @@
 }
 
 func TestLoadFromSourcesDuplicateIDs(t *testing.T) {
+	// Set up a buffer to capture log output
+	var buf bytes.Buffer
+	originalLogger := log.Logger
+	defer func() {
+		log.Logger = originalLogger
+	}()
+	log.Logger = log.Logger.Output(&buf)
+
 	// Create config with duplicate IDs across sources
 	configContent := `
 lists:
@@ -793,9 +803,21 @@
 	err = mappingFile.Close()
 	require.NoError(t, err)
 
-	_, err = LoadFromSources(configFile.Name(), []string{mappingFile.Name()})
-	require.Error(t, err)
-	assert.Contains(t, err.Error(), "duplicate mapping list ID found: duplicate-id")
+	// The function should now succeed but log the duplicate ID error
+	config, err := LoadFromSources(configFile.Name(), []string{mappingFile.Name()})
+	require.NoError(t, err)
+	require.NotNil(t, config)
+
+	// Check that the duplicate ID error was logged
+	logOutput := buf.String()
+	assert.Contains(t, logOutput, "Duplicate mapping list ID found")
+	assert.Contains(t, logOutput, "duplicate-id")
+
+	// Only the first mapping list (from config file) should be loaded
+	require.Len(t, config.Lists, 1)
+	assert.Equal(t, "duplicate-id", config.Lists[0].ID)
+	// Check that it's the one from the config file (has mapping "[A] <> [B]")
+	assert.Equal(t, "[A] <> [B]", string(config.Lists[0].Mappings[0]))
 }
 
 func TestLoadFromSourcesConfigWithOnlyPort(t *testing.T) {