Archived
Every module.json already declares a why for each port under listens, but plan only ever used it to build the firewall's rule set — nothing printed it. An operator deciding whether to assign a module had no way to see what it would open without reading the manifest by hand. plan <node> now prints each assigned module's listens entries — port, protocol, source, and its why — right under the module line, so the same text that feeds the firewall is visible at the point someone is actually deciding whether to open it.