diff --git a/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl
new file mode 100644
index 000000000..684a99102
--- /dev/null
+++ b/src/main/resources/org/eolang/lints/refs/base-must-be-merged.xsl
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ warning
+
+ Object
+
+
+
+
+ can be merged with its parent
+
+
+
+
+
diff --git a/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md
new file mode 100644
index 000000000..c5868aeeb
--- /dev/null
+++ b/src/main/resources/org/eolang/motives/refs/base-must-be-merged.md
@@ -0,0 +1,64 @@
+# '@base' attributes of objects must be merged if possible
+
+In [XMIR], the object must be merged with parent if the following
+conditions are met:
+
+1. Object is not abstract
+2. Attribute `@base` of parent object should start with dot
+3. Attribute `@base` object should not start with dot
+4. Object should not have data
+5. Object should not have inner objects
+
+Incorrect:
+
+```xml
+
+
+
+
+
+```
+
+Correct:
+
+```xml
+
+```
+
+Correct:
+
+```xml
+
+
+
+```
+
+Correct:
+
+```xml
+
+
+
+```
+
+Correct:
+
+```xml
+
+
+ A1-B2-C3-D4-E5
+
+
+```
+
+Correct:
+
+```xml
+
+
+
+
+
+```
+
+[XMIR]: https://news.eolang.org/2022-11-25-xmir-guide.html
diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml
new file mode 100644
index 000000000..d39df581a
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/catches-not-merged-objects.yaml
@@ -0,0 +1,16 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/refs/base-must-be-merged.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=1]
+ - /defects/defect[@line='2']
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml
new file mode 100644
index 000000000..870658d9a
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-base-starts-with-dot.yaml
@@ -0,0 +1,13 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/refs/base-must-be-merged.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml
new file mode 100644
index 000000000..9de923dc3
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-data.yaml
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/refs/base-must-be-merged.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml
new file mode 100644
index 000000000..81abae977
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-has-inner-object.yaml
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/refs/base-must-be-merged.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml
new file mode 100644
index 000000000..fe8433d23
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/no-merge-if-object-is-abstract.yaml
@@ -0,0 +1,13 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/refs/base-must-be-merged.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml
new file mode 100644
index 000000000..b4f54d1f4
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/base-must-be-merged/prints-name-of-not-merged-object.yaml
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2025 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/refs/base-must-be-merged.xsl
+asserts:
+ - /defects/defect[contains(text(), 'abracadabra')]
+document: |
+