diff --git a/src/main/resources/org/eolang/funcs/special-name.xsl b/src/main/resources/org/eolang/funcs/special-name.xsl
index 6386eccdc..c23dc93ac 100644
--- a/src/main/resources/org/eolang/funcs/special-name.xsl
+++ b/src/main/resources/org/eolang/funcs/special-name.xsl
@@ -7,6 +7,6 @@
-
+
diff --git a/src/main/resources/org/eolang/lints/names/invalid-name-notation.xsl b/src/main/resources/org/eolang/lints/names/invalid-name-notation.xsl
new file mode 100644
index 000000000..fdee43b62
--- /dev/null
+++ b/src/main/resources/org/eolang/lints/names/invalid-name-notation.xsl
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ warning
+ Object name
+
+ must match the regular expression [a-z]+(-[a-z]+)*
+
+
+
+
+
diff --git a/src/main/resources/org/eolang/motives/names/invalid-name-notation.md b/src/main/resources/org/eolang/motives/names/invalid-name-notation.md
new file mode 100644
index 000000000..2674d9d7e
--- /dev/null
+++ b/src/main/resources/org/eolang/motives/names/invalid-name-notation.md
@@ -0,0 +1,23 @@
+# Invalid name notation
+
+The name of any object must match the regular expression `[a-z]+(-[a-z]+)*`.
+Basically, it must follow kebab-case notation, using only Latin letters.
+No digits, no underscores, no uppercase characters.
+
+Incorrect:
+
+```eo
+# App.
+[] > mainApp
+ foo > x1
+ bar > y_
+```
+
+Correct:
+
+```eo
+# App.
+[] > main-app
+ foo > x
+ bar > y
+```
diff --git a/src/test/resources/org/eolang/lints/canonical.eo b/src/test/resources/org/eolang/lints/canonical.eo
index 13781efc4..24415a45a 100644
--- a/src/test/resources/org/eolang/lints/canonical.eo
+++ b/src/test/resources/org/eolang/lints/canonical.eo
@@ -16,7 +16,7 @@
*
x.put 2
while
- x.as-number.lt 6 > [i1] >>
+ x.as-number.lt 6 > [i] >>
[i] >>
seq > @
*
diff --git a/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-good-names.yaml b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-good-names.yaml
new file mode 100644
index 000000000..044f9a084
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-good-names.yaml
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/names/invalid-name-notation.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+ignore-schema: true
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-special-names.yaml b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-special-names.yaml
new file mode 100644
index 000000000..8364d7897
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-special-names.yaml
@@ -0,0 +1,19 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/names/invalid-name-notation.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+ignore-schema: true
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-throwing-test-name.yaml b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-throwing-test-name.yaml
new file mode 100644
index 000000000..d8b0aa689
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/allows-throwing-test-name.yaml
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com
+# SPDX-License-Identifier: MIT
+# yamllint disable rule:line-length
+---
+sheets:
+ - /org/eolang/lints/names/invalid-name-notation.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=0]
+ignore-schema: true
+document: |
+
diff --git a/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/catches-invalid-names.yaml b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/catches-invalid-names.yaml
new file mode 100644
index 000000000..a709e0aa4
--- /dev/null
+++ b/src/test/resources/org/eolang/lints/packs/single/invalid-name-notation/catches-invalid-names.yaml
@@ -0,0 +1,15 @@
+# SPDX-FileCopyrightText: Copyright (c) 2016-2026 Objectionary.com
+# SPDX-License-Identifier: MIT
+---
+sheets:
+ - /org/eolang/lints/names/invalid-name-notation.xsl
+asserts:
+ - /defects[count(defect[@severity='warning'])=3]
+ - /defects/defect[@line='2']
+ - /defects/defect[@line='3']
+ - /defects/defect[@line='4']
+input: |
+ [] > main
+ x1 > x1
+ xApp > xApp
+ x_snake > x_snake