|

docs: document [dependencies] conflicts field

Author: Chris Tusa <chris.tusa@leafscale.com>
Date: Jun 13, 2026 17:18
Changeset: e20ca708b5c03a425d955c5acc9e44f32a5a1643
Branch: default

Diff

diff -r dd69d8f889e5 -r e20ca708b5c0 CLAUDE.md
--- a/CLAUDE.md	Sat Jun 13 17:16:45 2026 -0500
+++ b/CLAUDE.md	Sat Jun 13 17:18:10 2026 -0500
@@ -302,6 +302,7 @@
 [dependencies]
 requires = ["svc1", "svc2"]  # must be running
 after = ["svc3"]             # ordering only (not hard dependency)
+conflicts = ["svc4"]         # mutually exclusive — both fail if both enabled; start refused if peer running
 
 [contract]
 param = ["inherit", "noorphan"]
diff -r dd69d8f889e5 -r e20ca708b5c0 ROADMAP.md
--- a/ROADMAP.md	Sat Jun 13 17:16:45 2026 -0500
+++ b/ROADMAP.md	Sat Jun 13 17:18:10 2026 -0500
@@ -147,8 +147,9 @@
 - [ ] **`wants` (soft dependencies)** — like `requires` but don't fail if
       the dependency is not enabled. Start it if available, proceed without
       it if not.
-- [ ] **`conflicts`** — prevent two services from running simultaneously
-      (e.g., sendmail vs postfix)
+- [x] **`conflicts`** — prevent two services from running simultaneously
+      (e.g., sendmail vs postfix). Symmetric; both fail if both enabled at
+      boot, runtime start refused if a conflicting peer is running.
 - [ ] **Milestones** — virtual grouping targets (`multi-user`, `network`,
       `single-user`) that aggregate sets of services. A milestone is
       "reached" when all its member services are online.
diff -r dd69d8f889e5 -r e20ca708b5c0 docs/DESIGN.md
--- a/docs/DESIGN.md	Sat Jun 13 17:16:45 2026 -0500
+++ b/docs/DESIGN.md	Sat Jun 13 17:18:10 2026 -0500
@@ -103,6 +103,7 @@
 [dependencies]
 requires = ["network", "filesystem"]
 after = ["name-services"]
+conflicts = ["other-mta"]    # mutually exclusive; never run together
 
 [contract]
 param = ["inherit", "noorphan"]
diff -r dd69d8f889e5 -r e20ca708b5c0 docs/man/man5/zyginit.5
--- a/docs/man/man5/zyginit.5	Sat Jun 13 17:16:45 2026 -0500
+++ b/docs/man/man5/zyginit.5	Sat Jun 13 17:18:10 2026 -0500
@@ -158,6 +158,19 @@
 .Pp
 Example:
 .Dl after = ["syslog", "name-services"]
+.It Sy conflicts Pq array of strings
+Services that must never run at the same time as this one.
+The relation is symmetric: declaring the conflict on either service is enough.
+If two conflicting services are both enabled at boot,
+.Em both
+are marked failed (zyginit never auto-selects a winner).
+At runtime,
+.Xr zygctl 8
+.Cm start
+is refused if a conflicting service is already running.
+.Pp
+Example:
+.Dl conflicts = ["sendmail"]
 .El
 .Ss [contract]
 Optional.