docs: document [dependencies] conflicts field
Author:
Chris Tusa <chris.tusa@leafscale.com>
Date:
Jun 13, 2026 17:18
Changeset:
e20ca708b5c03a425d955c5acc9e44f32a5a1643
Branch:
default
Changed files:
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.