Runtime boundaries

Decide which claims localhost2137 can establish and when a scenario needs another runtime or external test.

This page describes current behavior. localhost2137 runs the surface an installed plugin documents; it does not make every property of an external service local.

Boundary summary

A local scenario can establishIt cannot establish by itselfCanonical detail
Installed plugin behavior for the exact tested request, response, state transition, event, and client versionBroader provider parityProvider compatibility
Application traffic crossing its normal SDK or HTTP boundaryThe same claim when setup or inspection operations replace that trafficOperations and emulated APIs
Provider-shaped callbacks accepted by one configured receiverExternal dashboard setup, internet delivery, or receiver routing the application cannot expressCallbacks and webhooks
Independent plugin state, clocks, logs, and tracked work per instanceDifferent plugin config, callback destinations, processes, users, or permissionsInstances and isolation
Explicit clock windows and plugin reconciliationApplication clocks, system time, untracked work, or provider schedulersVirtual time and asynchronous work
Plain loopback HTTP in one developer or CI environmentDNS, TLS, load, regions, production networking, or provider availabilityChoose the right test boundary
Bearer authorization on control routes except healthAuthorization added by the runtime to provider-shaped routes, or a code sandboxLocal security model

Instance or runtime?

Required differenceUse
Service state, clock, logs, tracked workAnother instance in the same runtime
Host, port, storage root, service set, plugin config, callback destinationAnother runtime with another config
Trust, process permissions, user, filesystem, or network policyAn OS or CI isolation boundary

One runtime is one loopback process, resolved config, control token, and storage root. Every instance uses the same service keys and plugin config. Plugins execute inside that runtime process; an instance is not a process or code sandbox.

A service key owns its public route, CLI selector, typed handle, and durable storage namespace. A service-key change is not itself a migration. It removes one mount, creates another with separate state, and leaves the removed key's data stored until a deliberate plugin-supported migration moves it.

Operational limits

ConstraintCurrent behaviorConsequence
Network127.0.0.1, localhost, or ::1; plain HTTPSuitable for local development and isolated CI, not public or production network claims.
Config loadingOnce at startup; executable trusted Node.js codeSave does not hot-reload. Restart; control commands reject a fingerprint mismatch.
Storage ownershipOne runtime owns one root at a timeUse normal shutdown or the exact lock-recovery procedure; never delete a broad directory to silence a lock.
PersistenceDevelopment worlds reopen; temporary test storage follows test-runtime cleanupReset/destroy affect one selected world. Local state is not a backup or shared database.
InstallationNode.js 24 and pnpm; plugins may use native dependenciesA missing prebuilt binary may require a compiler toolchain before runtime behavior can be tested.

Configuration imports and plugins have the Node process's filesystem and network privileges. Keep them trusted and free of unrelated import-time side effects. Configuration covers validation and restart effects; Local security model covers authority and data handling.

Persistent and temporary storage should stay out of source control and build artifacts. If startup reports a lock, follow the exact recovery procedure. For failures after startup, preserve the first broken boundary and use Diagnose a failing scenario.