diff --git a/CHANGELOG.md b/CHANGELOG.md
index dd8ba2f..9a51963 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,15 @@ All notable changes to the **NoJS Skill** will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
-## [Unreleased](https://github.com/no-js-dev/nojs-skill/compare/v1.17.0...HEAD)
+## [Unreleased](https://github.com/no-js-dev/nojs-skill/compare/v1.18.0...HEAD)
+
+## [1.18.0](https://github.com/no-js-dev/nojs-skill/compare/v1.17.0...v1.18.0) — 2026-07-07
+
+### Added
+
+- Directive compatibility section in SKILL.md documenting directive interaction rules, if-gate semantics, and use priority changes
+- Limitation notes in directive reference docs for known incompatible combinations
+- 6 validation diagnostics documented (switch×loop, if+loop, ref+loop, bind-value+model, watch+on:change, t+bind)
## [1.17.0](https://github.com/no-js-dev/nojs-skill/compare/v1.16.1...v1.17.0) — 2026-07-06
diff --git a/nojs/SKILL.md b/nojs/SKILL.md
index 11aa98d..2054877 100644
--- a/nojs/SKILL.md
+++ b/nojs/SKILL.md
@@ -1,7 +1,7 @@
---
name: nojs
metadata:
- version: 1.17.0
+ version: 1.18.0
description: Provides expert-level knowledge of the No.JS HTML-first reactive framework for building dynamic web applications using only HTML attributes. Activates when the user explicitly mentions No.JS, NoJS, no-js.dev, cdn.no-js.dev, @no-js-dev/nojs, or the NoJS LSP. Also activates when HTML files use NoJS-specific directive combinations on plain HTML elements — bind (text binding attribute), foreach/each/for (loop attributes on elements), on:click/on:submit (colon-syntax event attributes), model (two-way binding attribute), state (reactive state attribute), store (global store attribute), computed/watch (reactive derivation attributes), show/hide (visibility toggle attributes), bind-html, bind-*, class-*, style-* (attribute-binding patterns), route/route-view (client-side routing attributes), validate (form validation attribute), or use/include (template composition attributes). Does NOT activate for generic HTML/CSS questions, React/Vue/Angular/Svelte/Alpine.js/HTMX development, or JavaScript framework questions unrelated to No.JS.
---
@@ -469,6 +469,20 @@ Browser globals (`window`, `document`, `location`, `history`, `navigator`) avail
- Statement write-back: in `on:*`/`watch`, mutated variables auto-write-back to the owning context
- AST caching: LRU-cached (configurable: `exprCacheSize`, default 500)
+
+## 6.5. Directive Compatibility
+
+Certain directive combinations on the same element produce unexpected behavior. The NoJS LSP warns about these during development.
+
+| Combination | Problem | Fix |
+|------------|---------|-----|
+| `case`/`default` + `each`/`foreach`/`for` | Switch becomes inert; all branches render | Move loop inside the case branch |
+| `if` + `each`/`foreach`/`for` | Condition cannot filter individual items | Use `filter` attribute or wrap in container with `if` |
+| `ref` + `each`/`foreach`/`for` | Every clone re-registers; `$refs` points to last clone | Remove `ref` or access via loop context |
+| `bind-value` + `model` | Redundant two-way bindings; duplicate listeners | Use one: `model` (preferred) or `bind-value` |
+| `watch` + `on:change` (on form controls) | Both claim the change event; may conflict | Use `watch` with its `on:change` companion OR a standalone `on:change` |
+| `t` + `bind` | Both write text content; last-processed wins silently | Use one text source per element |
+
## 7. Config Reference
| Option | Default | Description |
diff --git a/nojs/references/directives/binding.md b/nojs/references/directives/binding.md
index 131eeed..d6a9cad 100644
--- a/nojs/references/directives/binding.md
+++ b/nojs/references/directives/binding.md
@@ -44,6 +44,7 @@ Replaces the element's text content with the evaluated expression. Supports pipe
- When the expression evaluates to `null` or `undefined`, the text content is set to an empty string.
- Pipe expressions are evaluated left to right: `bind="value | filterA | filterB"` passes the result of `filterA` into `filterB`.
- HTML entities in the expression result are rendered as literal text (not HTML). Use `bind-html` for HTML output.
+- **Incompatible with `t` on the same element:** Both `bind` and `t` write text content. The last-processed directive wins silently. Use only one text source per element.
### Complete Example
@@ -105,6 +106,8 @@ Works with any attribute: `src`, `href`, `alt`, `title`, `disabled`, `checked`,
On ``, `