diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,9 @@
 # trace-embrace changelog
 
+## Version 1.3.0 2026-02-26
+  * fix rebuild bug with add-dependent-file package
+  * fix trace-embrace.yaml duplication (created HLS)
+
 ## Version 1.2.0 2025-06-05
   * support GHC-9.12.2
 
diff --git a/src/Debug/TraceEmbrace/Config/Load.hs b/src/Debug/TraceEmbrace/Config/Load.hs
--- a/src/Debug/TraceEmbrace/Config/Load.hs
+++ b/src/Debug/TraceEmbrace/Config/Load.hs
@@ -2,25 +2,29 @@
 {-# LANGUAGE OverloadedStrings #-}
 module Debug.TraceEmbrace.Config.Load where
 
+import AddDependentFile ( addDependentFile, getPackageRoot, (</>) )
 import Control.Concurrent
-import Control.Exception
-import Data.Cache.LRU as LRU
-import Data.Char
+    ( MVar, newMVar, takeMVar, putMVar, modifyMVar )
+import Control.Exception ( catch, bracket )
+import Data.Cache.LRU as LRU ( LRU, newLRU, lookup, insert )
+import Data.Char ( toUpper, isDigit, isAlphaNum )
 import Data.Generics.Labels ()
-import Data.IORef
+import Data.IORef ( IORef, newIORef, readIORef, atomicWriteIORef )
 import Data.List qualified as L
 import Data.RadixTree.Word8.Strict qualified as T
 import Data.Yaml as Y
+    ( decodeFileThrow, encodeFile, prettyPrintParseException )
 import Debug.Trace (traceIO)
 import Debug.TraceEmbrace.Config.Type
 import Debug.TraceEmbrace.Config.Validation
-import Language.Haskell.TH
-import Language.Haskell.TH.Syntax
-import Refined
-import System.Directory
+    ( refineS, required, SeparatorValidator )
+import Language.Haskell.TH ( Q, Loc(loc_package), runIO )
+import Language.Haskell.TH.Syntax ( Lift )
+import Refined ( IdPred, Refined, NonEmpty, unrefine, refineTH )
+import System.Directory ( doesFileExist )
 import System.Environment (lookupEnv)
-import System.IO
-import System.IO.Unsafe
+import System.IO ( Handle )
+import System.IO.Unsafe ( unsafePerformIO )
 
 
 validateTraceMessageFormat ::
@@ -78,8 +82,8 @@
 defaultYamlConfig :: YamlConfigMaybe
 defaultYamlConfig = newYamlConfig { version = Nothing }
 
-loadYamlConfig :: IO YamlConfig
-loadYamlConfig = do
+loadYamlConfig :: FilePath -> IO YamlConfig
+loadYamlConfig fp = do
   doesFileExist fp >>= \case
     True ->
       configFromJust . (<> defaultYamlConfig) =<< catch (Y.decodeFileThrow fp) badYaml
@@ -98,7 +102,6 @@
     badYaml e =
       fail $ "Fail to parse " <> show fp <> "file due:\n" <> prettyPrintParseException e
       <> "\nRename or delete existing config file to get default config."
-    fp = traceEmbraceConfigFileName
 
 traceEmbraceConfigFileName :: FilePath
 traceEmbraceConfigFileName = "trace-embrace.yaml"
@@ -133,26 +136,26 @@
 {-# NOINLINE configReadToken #-}
 
 getConfig :: Q TraceEmbraceConfig
-getConfig = do
-  c <- runIO readConfigRef >>= loadIfNothing
-  runIO (doesFileExist traceEmbraceConfigFileName) >>= \case
-    True -> addDependentFile traceEmbraceConfigFileName
-    False -> reportWarning $ "Config File is missing - skip dependency"
-  pure c
+getConfig = runIO readConfigRef >>= loadIfNothing
   where
     readConfigRef = readIORef traceEmbraceConfigRef
     loadIfNothing = \case
-      Nothing -> runIO $ do
-        bracket (takeMVar configReadToken)
-          (putMVar configReadToken)
-          (\() ->
-             readConfigRef >>= \case
-               Just c ->
-                 pure c
-               Nothing -> do
-                 c <- yaml2Config <$> loadYamlConfig
-                 (atomicWriteIORef traceEmbraceConfigRef (Just c))
-                 pure c)
+      Nothing -> do
+        ymConfPath <- (</> traceEmbraceConfigFileName) <$> getPackageRoot
+        r <- runIO $ do
+          bracket (takeMVar configReadToken)
+            (putMVar configReadToken)
+            (\() ->
+               readConfigRef >>= \case
+                 Just c ->
+                   pure c
+                 Nothing -> do
+                   c <- yaml2Config <$> loadYamlConfig ymConfPath
+                   (atomicWriteIORef traceEmbraceConfigRef (Just c))
+                   pure c)
+        addDependentFile ymConfPath
+
+        pure r
       Just c -> pure c
 
 traceAll :: [LeveledModulePrefix]
diff --git a/trace-embrace.cabal b/trace-embrace.cabal
--- a/trace-embrace.cabal
+++ b/trace-embrace.cabal
@@ -1,6 +1,6 @@
 cabal-version:   3.0
 name:            trace-embrace
-version:         1.2.0
+version:         1.3.0
 license:         BSD-3-Clause
 license-file:    LICENSE
 category:        Development
@@ -341,7 +341,8 @@
     A trace line for the snippet above would be:
     
     Module:fun: 7 get; x#: 1#
-
+extra-source-files:
+  trace-embrace.yaml
 tested-with:
   GHC == 9.10.1, GHC == 9.12.2
 extra-doc-files:
@@ -376,13 +377,14 @@
   import: base
   hs-source-dirs: src
   build-depends:
-    cpphs < 2,
-    deepseq < 1.8,
-    ghc < 9.13,
-    haddock-use-refs < 2,
-    radix-tree < 2,
-    tagged < 1,
-    transformers < 1
+    , cpphs < 2
+    , add-dependent-file < 1
+    , deepseq < 1.8
+    , ghc < 9.13
+    , haddock-use-refs < 2
+    , radix-tree < 2
+    , tagged < 1
+    , transformers < 1
 
   exposed-modules:
     Debug.TraceEmbrace
diff --git a/trace-embrace.yaml b/trace-embrace.yaml
new file mode 100644
--- /dev/null
+++ b/trace-embrace.yaml
@@ -0,0 +1,20 @@
+levels:
+- '-'
+mode:
+  tag: TraceStd
+runtimeLevelsOverrideEnvVar:
+  tag: CapsPackageName
+traceMessage:
+  entrySeparator: '; '
+  keyValueSeparator: ': '
+  retValPrefix: ' => '
+  traceLinePattern:
+  - tag: FullyQualifiedModule
+  - contents: '::'
+    tag: Delimiter
+  - tag: FunctionName
+  - contents: ': '
+    tag: Delimiter
+  - tag: LiteralMessage
+  - tag: Variables
+version: 1
