net builder detail (Net Builder)



NET Builder Authoring (Staff/Builder)

Builders can author NEW NET content -- external topology, hosts,
sections, directed passages, passive ICE, Hostile ICE, accounts, Data
Vault designation (including retention and paid storefront), software
content variants, and hardware spawning -- entirely through in-game
commands. No Python editing is required for this content. Everything
created this way survives a Server reload/restart.

STABLE IDS vs DISPLAY NAMES
    Every piece of content has a machine-stable ID (used in commands)
    separate from its player-facing display name. IDs never change
    once created; display names can be edited freely.

EXTERNAL TOPOLOGY vs HOST
    The external NET (Z-plane coordinate space, Nodes, ingresses,
    gateways) is built with @nettopo. A HOST is the internal
    section-set (Login, CPU, Data Vault, ...) attached to one Node,
    built with @nethost. A Node must exist before you can attach a
    host to it.

PERMANENT ROOMS
    Each host section is backed by one real, permanent Evennia Room --
    created (or reused) by @nethost/reconcile. Reconcile never rewrites
    the presentation of an already-existing Room. When you deliberately
    change one area's prose with @nethost/area-desc, that explicit edit
    updates the persistent builder definition and synchronizes that exact
    permanent Room immediately if it already exists.

DIRECTED BOUNDARIES -- CRITICAL
    A passage between two sections is DIRECTIONAL. A -> B and
    B -> A are two completely independent boundary records, each
    with its own required access level, passive ICE, Krunch grant,
    ICE repair threshold, and Hostile ICE. Creating one direction
    NEVER creates or affects the other. This is deliberate: a corridor
    can be wide open walking IN and heavily defended walking OUT.

PASSIVE ICE vs ICEB SOFTWARE
    Passive ICE (@netice) is the boundary's movement barrier and has
    its own configured strength. The numeric boundary access level is the
    authorization that ACTIVE passive ICE recognizes; access alone is never
    an invisible wall. No passive ICE means ordinary traversal is open even
    without host access. With active passive ICE, sufficient recognized
    access passes normally; otherwise ICEB cyberdeck programs are used to
    deal with that protection. They are not the same thing.

HOSTILE ICE (HICE)
    A HICE (@nethice) is a construct that CAN spawn to defend one
    specific directed boundary -- attach it with @nethost/hice.
    Like passive ICE, it is coupled to ONE direction only; the reverse
    passage never inherits it.

HOST ACCOUNTS
    @nethost/account-add creates a real login account on a host.
    Access level 0 is a completely LEGAL authenticated account -- it
    is never treated as "no account".

DATA VAULTS (zero, one, or several per host)
    Any existing host area can carry a Data Vault role. Add an exact role
    with @nethost/vault-set <net>/<host> <area_id>. This is additive:
    it never removes another Vault. The older
    @nethost/vault-set <net>/<host> = <area_id> form is retained only
    as singleton replacement shorthand and refuses to collapse a host that
    already has multiple Vaults.

    @nethost/vault-show <net>/<host> lists every configured Vault;
    add a bare <area_id> to show one exact Vault. /vault-unset follows
    the same exact-area rule, with host-only shorthand only when
    unambiguous. Removing a Vault role never deletes its Room or files.

AREA-AWARE VAULT POLICY / FILE CONTROLS
    When a host has multiple Vaults, policy/file commands select one with
    area:<area_id>. Host-only shorthand is accepted only when exactly
    one Vault exists.

DATA VAULT RETENTION
    Default/file retention:
      @nethost/vault-retention <net>/<host> [area:<id>] [<file#>] =
      <persistentonsume_on_download>

    Upload policy:
      @nethost/vault-uploads <net>/<host> [area:<id>] = <allow|deny>

PAID DATA VAULT
    Legacy seller metadata (compatibility only):
      @nethost/vault-seller <net>/<host> [area:<id>] =
      <economic_account_idone>
      Paid Vault downloads do not credit this account.

    File price:
      @nethost/vault-price <net>/<host> [area:<id>] <file#> =
      <price|freeone>

    Seed/remove:
      @nethost/vault-add <net>/<host> [area:<id>] software = <software_id>
      @nethost/vault-add <net>/<host> [area:<id>] text = <display name>
      @nethost/vault-remove <net>/<host> [area:<id>] <file#>

    New files inherit the selected Vault's default retention. A priced file
    is refused by ordinary help download; use help buy. Buying
    debits the buyer's digital credits as a credit sink; no seller account
    is required or paid. "none" clears legacy seller metadata or explicit
    price without touching the stored file. Staff-seeded software is real
    downloadable content; normal deck installation still follows the
    physical/removable-media or remote-download software workflow.

@NETSOFT -- software content variants
    @netsoft/clone <new_id> = <existing_id> creates a new software
    definition by cloning an existing one, then
    @netsoft/set <id> <field> = <value> tunes SAFE fields only
    (display_name, source_name, storage_size, base_effectiveness,
    running_speed, copy_difficulty, notes). You can NEVER invent a new
    mechanic this way -- a clone inherits its source's behavior_id
    (the stable MECHANICAL identity that selects a real runtime
    adapter, separate from software_id, the stable CONTENT
    identity) unchanged by default, and @netsoft/set <id> behavior =
    <behavior_id> may only repoint it to another ALREADY-REGISTERED
    behavior -- never an arbitrary string, path, or callable.
    Every currently implemented software mechanic in this catalog is
    now migrated to the behavior registry -- clone ANY existing
    program and it genuinely runs for its real effect, under your
    clone's OWN software_id and display name, exactly like storing/
    trading/selling it already works. @netsoft/show reports
    "Executable: yes" and "Builder Cloneable: yes" for every current
    source. New content using an already-registered mechanic is
    builder-authorable this way; a genuinely NEW mechanic still
    requires a programmer to implement and register it.

@NETHARDWARE -- hardware index
    Read-only list/show/spawn over the EXISTING donor cyberdeck
    hardware catalog and its matching Item prototypes. Never a second
    hardware system. @nethardware/list [family],
    @nethardware/show <source_id>, @nethardware/spawn <source_id>.

@NETHOST/CHECK -- validation
    @nethost/check <net>/<host> is a READ-ONLY report that flags:
    duplicate boundary IDs, boundaries referencing missing areas,
    negative access/Krunch/ICE-repair levels, out-of-range SurfStream
    difficulty, areas with no permanent Room yet, and EVERY configured
    Data Vault referencing a missing area. Legacy seller metadata is not a
    purchase prerequisite and is not validated here. It never assumes every
    route must be bidirectional -- a one-way passage is not itself a problem.

STAFF DEBUG / RESET CONTROLS (Builder-only, never player-facing)
    @nethost/ice-state <net>/<host> <boundary_id> inspects a
    boundary's disabled/destroyed protection flags.
    @nethost/ice-disable / /ice-destroy explicitly set those
    flags for testing; /ice-restore clears both. /hice-state
    inspects whether Hostile ICE is currently active on a boundary and
    its remaining strength; /hice-reset despawns/clears it. These
    all use the existing state APIs -- never raw Attribute mutation.

VALIDATION / RECONCILIATION
    @nethost/reconcile creates any missing permanent Rooms for a
    host's currently configured sections. It is safe to run repeatedly
    (idempotent) and never deletes anything.

QUICK EXAMPLE
    @nettopo/create test_net = Builder Test Network
    @nettopo/plane test_net 1 = Public NET | 0,20,0,20
    @nettopo/terrain test_net 5,5,1 = lane
    @nettopo/terrain test_net 1,1,1 = lane
    @nettopo/node test_net/corp_test = 5,5,1 | Test Corporate Host
    @nettopo/ingress test_net/default = 1,1,1 | Test Entry

    @nethost/create test_net/corp_test = Test Corporate Host
    @nethost/area-add test_net/corp_test cpu = CPU

    @nethost/connect test_net/corp_test login_to_cpu = login -> cpu | east
    @nethost/connect test_net/corp_test cpu_to_login = cpu -> login | west
    @nethost/access test_net/corp_test cpu_to_login = 200

    @netice/create wall_2_0 = Wall 2.0 | 250
    @nethice/create queen_spider = Queen Spider 1.4 | 200
    @nethost/ice test_net/corp_test cpu_to_login = wall_2_0
    @nethost/hice test_net/corp_test cpu_to_login = queen_spider

    @nethost/account-add test_net/corp_test guest = 0 | guestpass
    @nethost/vault-set test_net/corp_test cpu

    @nethost/reconcile test_net corp_test
    @nethost/check test_net/corp_test

For a complete step-by-step build of a small corporate host from
nothing, see help net builder tutorial.

See also: help @nethost, help @nettopo, help @netice,
help @nethice, help @netsoft, help @nethardware,
help buy