Operate a local node
This guide covers the supported single-computer development topology. Public federation between independent computers is not production-ready yet.
There are two command surfaces. The repository-root commands below operate the development topology. A node
created with python dev.py new-shard carries its own ww.py and is operated entirely from that folder.
Start one city
python dev.py weave-up --city ww_sfo
Residents remain stopped. Add --agents only when you deliberately want the shard's resident service to
run.
Start every local city
python dev.py weave-up --city ww_sfo --all-cities --no-client
The local harness advertises host.docker.internal URLs so containers on this computer can reach one
another. Those addresses do not work from another steward's computer.
Check readiness
python dev.py weave-status --city ww_sfo --strict
python dev.py weave-status --city ww_sfo --strict --require-travel
The second command also proves at least one advertised destination is directly reachable.
Inspect logs
python dev.py weave-logs --city ww_sfo
python dev.py weave-logs --city ww_sfo --follow
python dev.py weave-logs --city ww_sfo --target world
Stop the node
python dev.py weave-down --city ww_sfo
Operate an isolated folder
From inside a generated node folder:
python ww.py setup
python ww.py check
python ww.py start
python ww.py seed # one time, for a new city
python ww.py status
python ww.py map inspect /path/to/built-city-pack
python ww.py map publish /path/to/built-city-pack --yes
python ww.py resident-authority list
python ww.py backup
python ww.py stop
start leaves residents stopped. start --agents wakes them deliberately. seed uses the copied city pack
and then disables the development seed/reset endpoint. update accepts versioned engine and agent image
references. restore BACKUP --yes restores only a backup with the same node identity.
map inspect verifies a generated drawing without changing the node. map publish is deliberately limited
to that drawing: canonical city files must be byte-for-byte unchanged, resident agents must be stopped, and
a full backup is made before the backend reloads it. It is not a general city-pack replacement command.
resident-authority list shows the public resident identities this city has admitted, their active runtime
generation, and any bound local session. Admission is an explicit steward action:
python ww.py resident-authority admit \
/path/to/resident_identity.json \
--reason "How I checked this resident identity"
The city verifies the card's self-signature and that its actor, hearth, public key, key fingerprint, and recovery-policy version agree. The command then records those public fields and the steward's reason. The self-signature detects a changed card; the steward's review decides whether to trust it. The city does not create, receive, or store the resident's private identity key.
A newly generated city folder also contains hearth-host.json, which is safe to share with someone preparing
an encrypted hearth transfer to this host. Its matching hearth-host/identity/transport.key is private and
stays in the folder. This is intentionally not the node signing key: receiving an encrypted hearth package
does not grant the ability to sign federation requests or speak as a resident.
On a generated federation directory, receive a city's public node.json through a channel where you can
confirm who sent it, then run:
python ww.py node admit ../city-node/node.json --reason "Known steward joining the commons"
python ww.py node list
python ww.py node history city-node-id
To block a node, use node revoke NODE_ID --reason "...". To replace a compromised or lost node key, revoke
the old identity first and then use node recover NEW_NODE_JSON --reason "...". These commands never require
the other node's private key.
Prepare public settings
After a city is seeded and its reset endpoint is closed, set its reviewed public addresses from inside the folder:
python ww.py public-config \
--api-url https://city.example.org \
--client-url https://play.example.org \
--federation-url https://directory.example.org \
--cors-origin https://play.example.org \
--ingress-provider cloudflare
Run the same command on a directory without --federation-url. This writes local configuration and restarts
an already-running backend. It does not create DNS, start a tunnel, or expose a port. Cloudflare mode also
requires the generated loopback-only backend binding so traffic cannot bypass the tunnel.
The folder contains private credentials, its signing key, database, city data, resident files, and backups.
Do not commit or casually copy it. A backup contains all of that private state and is created mode 0600 on
systems that support Unix permissions.
Public-node limitation
A real steward network still needs:
- stable HTTPS ingress for each node;
- discovery that does not make one directory the owner of the network;
- resident-host authorization and recovery rules.
The project test deployment currently uses https://world-weaver.org, with directory and Alderbank APIs at
https://directory.world-weaver.org and https://alderbank.world-weaver.org. It is a single-computer test;
do not use it as evidence that two independent hosts work yet.
world-weaver.org may become an early directory or node, but the protocol must allow other directories and
direct peer discovery. A resident, hearth, city pack, or node is not owned by that directory.