@wairon/cli 5.1.1-dev.105 → 5.1.1-dev.107

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -77,6 +77,49 @@ tables, and rules — see [Extending wairon](docs/extending-wairon.md).
77
77
 
78
78
  ---
79
79
 
80
+ ## Reachability: what reaches each verb
81
+
82
+ Every Portal verb must be **reached**: either a modelled caller in the design
83
+ calls it (a `call` step along a `dependsOn` edge, or `alias::portal.verb` across
84
+ projects), or the verb is declared an **entry** — callers outside the design
85
+ reach it. Nothing else counts, so a Portal nobody calls and nobody enters is
86
+ reported (`UNUSED_COMPONENT` / `UNUSED_METHOD`), with both remedies named.
87
+
88
+ - **Transports.** A Portal states its `transport`, one vocabulary with its
89
+ endpoints: network (`HTTP`, `gRPC`, `GraphQL`, `MessageBus`, `Custom`), local
90
+ (`CLI`, `IPC`, `NamedPipe`, `JSONRPC` for stdio JSON-RPC such as a language
91
+ server or stdio MCP) or `InProcess` (a library, which binds no endpoint).
92
+ - **Entries.** `invokedBy: { kind: entry, caller: "…" }` on the Portal (every
93
+ verb inherits it) or on one verb. Declare one only where the callers really are
94
+ outside the design: browsers, a CLI user, an AI tool over stdio, the
95
+ applications that link a library. Never invent one to silence a finding —
96
+ model the caller instead.
97
+ - **Networks.** A project may declare `network: true` (or `{ description }`) in
98
+ `.wai/project.yaml`: it and its members form an isolated network. An entry's
99
+ `scope` is relative — `outside` (the default) or `network` (sibling services
100
+ inside the innermost network). Inside a network only a `gateway` Portal takes
101
+ entries from outside, and a modelled call crossing in must land on one. The
102
+ family run at the root proves every `network` entry has a modelled caller
103
+ (`ENTRY_UNPROVEN`). A project with no network never sees any of this.
104
+ - **Libraries are called directly.** Another project's `InProcess` Portal is
105
+ called from any component — no client Adapter needed. Pure and read logic may
106
+ only call library verbs whose `effect` allows it (`LIBRARY_CALL_IMPURE`), and a
107
+ native library called from another language needs an `abi` (`c` or `wasm`)
108
+ (`LANGUAGE_BRIDGE_MISSING`). Wrapping a volatile third-party API in an Adapter
109
+ stays a good habit, never a rule.
110
+ - **Extension points.** A producer exports a contract consumers implement with
111
+ `role: implement`; the consumer's interface declares `implements: alias::name`.
112
+ - **Networking is derived.** `wairon network flows | policy | diagram | check |
113
+ why` turns the modelled reach into an allowed-flows matrix, Kubernetes
114
+ `NetworkPolicy`, a trust-boundary diagram and live-flow checks — the specs
115
+ never hold an address. See [Derived networking](docs/network.md).
116
+
117
+ Upgrading a tree written before this model: `wairon doctor --fix` migrates the
118
+ retired forms (`portalType`, listener `mounts`, the old `invokedBy` kinds), then
119
+ declare the entries it will not invent.
120
+
121
+ ---
122
+
80
123
  ## Domains & agents
81
124
 
82
125
  Agents are **derived from the spec tree** — you never hand-maintain an agent
@@ -180,7 +223,9 @@ git add .wai && git commit -m "Approve the design"
180
223
  # --strict also fails when .wai/lock.json is missing or a member project was
181
224
  # never approved; plain lock-check only fails an approval that no longer matches.
182
225
  wairon lock-check --strict
183
- wairon validate --ci # the conformance gate; externals are judged against their pins
226
+ wairon validate --ci # the conformance gate, run at the FAMILY ROOT (the project that
227
+ # declares the members): there it is the family run, which judges
228
+ # the network proofs; externals are judged against their pins
184
229
  # Optional: gate on the LIVE producers of your externals as well
185
230
  # (exit 1 when one is incompatible, 2 when one could not be compared).
186
231
  wairon externals status
@@ -216,6 +261,7 @@ See [docs/cli.md](docs/cli.md). Summary:
216
261
  | `wairon list` / `wairon show <id>` / `wairon agent brief <id>` | Inspect agents resolved from the spec tree; print one's live brief |
217
262
  | `wairon export [--out <file>]` | The whole design, resolved, as one JSON document ([format](docs/design-export.md)) |
218
263
  | `wairon diagram [--all] [--canvas] [--drawio] [--excalidraw] [--sequence <comp:method>]` | Mermaid, interactive canvas, and editable draw.io/Excalidraw exports |
264
+ | `wairon network flows \| policy \| diagram \| check \| why` | Networking derived from the design: allowed flows, Kubernetes `NetworkPolicy`, a trust-boundary diagram, live-flow checks ([details](docs/network.md)) |
219
265
  | `wairon rules list` | The conformance rule registry (the architecture linter) |
220
266
  | `wairon pack init \| build \| install \| use \| unuse \| impact \| sync \| bundle \| which \| list \| add \| remove` | Extension packs: injected profiles, language tables, and rules |
221
267
  | `wairon member …` / `wairon subsystem externalize` / `wairon project rename` | Members (parts and projects) and the family migrations |