Stats Telemetry Contract
This is the canonical reference for values intentionally written to
Memory.stats.
Purpose And Boundary
Screeps Memory contains rich internal state for creep behavior, room
intelligence, economy decisions, maintenance summaries, debug output, and
workflow bookkeeping. Grafana cannot automatically see all of that state. Only
values deliberately projected into Memory.stats are part of this repository's
telemetry interface.
Treat Memory.stats as the stable downstream contract. A value existing in
Memory.rooms, Memory.creeps, Memory.tickSpeed, or another internal Memory
path does not mean it is available in Grafana.
Game state and internal Memory
|
v
stats collection code in src/stats/
|
v
Memory.stats
|
v
generic downstream memory-to-StatsD exporter
|
v
Graphite
|
v
Grafana
This Screeps repository owns the pipeline only through Memory.stats.
Downstream exporter behavior, StatsD formatting, Graphite storage, and Grafana
dashboards belong to a separate observability project.
Telemetry Design Rules
- Prefer numeric leaf values.
- Export booleans as
0or1. - Export enums as documented numeric mappings.
- Avoid usernames, object IDs, free-form strings, arrays, positions, and other high-cardinality values.
- Keep metric paths stable where practical.
- Preserve compatibility aliases only when intentionally required.
- Document units and intended Graphite treatment.
- Distinguish current-state gauges, per-tick values, signed gauges, and cumulative counters.
- Never emit a property named
totalanywhere underMemory.stats. Wildcard queries such asstats.gauges.<namespace>.*should return sibling series with comparable scale. A.totalaggregate can dominate Grafana's automatic Y-axis and flatten the useful individual series. - Redundant aggregates should be calculated downstream when needed. If a cumulative measurement is operationally necessary, use a separate descriptive metric name or namespace that will not be swept into the sibling wildcard family.
Memory.stats.rooms contains detailed room telemetry only for visible owned
rooms where room.controller?.my === true. Memory.stats.observedRooms
contains a numeric projection from persistent room intelligence and may include
previously scouted rooms after the scout leaves.
Exported Metric Reference
Placeholders:
<roomName>is a Screeps room name.<role>isharvester,hauler,scout,upgrader,builder,colonizer,mineralMiner,depositHarvester,remoteHarvester, orremoteReserver.<spawnName>is a spawn name.<sourceId>is a visible owned-room source id.
Global Time
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
time |
number | game ticks | gauge | Current Game.time. |
Memory Governor
These global gauges project the most recent 250-tick Memory Governor
evaluation. Stats collection does not reread RawMemory, recalculate growth or
pressure, or invoke reclamation.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
memory.bytes |
number | serialized bytes | sampled gauge | Length of the incoming serialized RawMemory string at the latest evaluation. It updates at most once per 250 ticks. |
memory.growth |
number | bytes per game tick | sampled signed gauge | Change from the prior byte sample divided by elapsed ticks. Positive values indicate growth. |
memory.growthEwma |
number | bytes per game tick | sampled signed gauge | Slow-moving growth signal with smoothing factor 0.2. The governor retains no time series. |
memory.pressure |
number | enum | gauge | 0=healthy, 1=elevated, 2=critical. Elevated begins at 1,500,000 bytes and critical at 1,800,000 bytes. |
memory.reclaimRuns |
number | runs | cumulative counter | Number of due elevated/critical evaluations that requested bounded owner cleanup. |
memory.reclaimedItems |
number | owner-classified items | cumulative counter | CIA event-history entries reclaimed across all bounded runs. It is not a byte count. |
memory.lastReclaimedItems |
number | owner-classified items | sampled gauge | Items reclaimed by the most recent cleanup request. |
Highway Deposit Opportunities
The top-level gauges summarize the last CPU-admitted advisory evaluation.
The nested operations gauges describe the one globally bounded runtime pilot.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
deposits.visibleDeposits |
number | deposits | gauge | Unexpired deposit facts currently retained in CIA resource surveys. |
deposits.viableOpportunities |
number | home/deposit opportunities | gauge | Advisory assessments with no current blocker. One deposit can contribute once per eligible owned home. |
deposits.rejectedOpportunities |
number | home/deposit opportunities | gauge | Advisory candidates currently carrying one or more blockers. |
deposits.opportunityValue |
number | advisory value points | gauge | Sum of nonnegative burden-adjusted value across the bounded evaluated opportunity set. It is not credits, energy, or authorization to spend. |
deposits.lastEvaluatedAt |
number | game ticks | gauge | Tick of the most recent CPU-admitted deposit-opportunity evaluation. |
deposits.operations.preparing |
number | boolean | gauge | 1 while exact operator approval is awaiting live admission and spawn commitment. |
deposits.operations.active |
number | boolean | gauge | 1 while the bounded deposit workforce is committed and harvesting is authorized. |
deposits.operations.suspended |
number | boolean | gauge | 1 while temporary risk has stopped harvesting pending full revalidation. |
deposits.operations.windingDown |
number | boolean | gauge | 1 while new harvesting/replacement is stopped and useful cargo is being evacuated. |
deposits.operations.completed |
number | boolean | gauge | 1 during the bounded completed state before retirement. |
deposits.operations.spawnInvestment |
number | energy | gauge | Actual energy spent on committed deposit bodies. |
deposits.operations.expectedYield |
number | deposit units | gauge | Current bounded estimate of future yield using the actual selected body. |
deposits.operations.harvested |
number | deposit units | gauge | Deposit resource actually harvested by the operation. |
deposits.operations.cargoInTransit |
number | deposit units | gauge | Useful typed cargo currently carried by the assigned worker. |
deposits.operations.returned |
number | deposit units | gauge | Useful typed cargo delivered to owned Storage or Terminal. |
deposits.operations.remainingLifetime |
number | game ticks | gauge | Latest live or CIA-derived remaining Deposit lifetime. |
deposits.operations.cooldown |
number | game ticks | gauge | Latest cooldown evidence used by runtime economics. |
CPU
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
cpu.bucket |
number | CPU bucket units | gauge | Current Game.cpu.bucket observed during stats collection. |
cpu.bucketTargets.openAt |
number | CPU bucket units | gauge | Configured threshold at which the bucket governor enters or returns to open posture. |
cpu.bucketTargets.recoveryAt |
number | CPU bucket units | gauge | Configured threshold at or below which open posture enters recovery. |
cpu.bucketTargets.emergencyAt |
number | CPU bucket units | gauge | Configured threshold at or below which the governor enters emergency posture. |
cpu.bucketTargets.emergencyExitAt |
number | CPU bucket units | gauge | Configured threshold at which the governor may leave emergency posture for recovery. |
cpu.governor |
number | enum | gauge | Authoritative bucket-governor posture: 0=open, 2=recovery, 3=emergency; value 1 is retired. |
cpu.reopening.stage |
number | leases | gauge | Numeric reopening capacity proven by Launch Control. It progresses through each integer level up to the autonomous or bounded operator target. |
cpu.reopening.maximumActiveLeases |
number | leases | gauge | Current optional-work admission cap: the lesser of proven capacity and the effective target. Existing leases are not revoked when the cap falls. |
cpu.reopening.leases.<workClass> |
number | enum | gauge | Current lease state for each fixed Launch Control work class: 0=inactive, 1=priority, 2=rotation, 3=operator. An unlabelled active legacy lease is reported as priority. Emergency posture can suppress execution without revoking an unexpired lease. The fixed work-class leaves are scouting, intelligence, logistics, infrastructure, mineralDevelopment, and remoteDevelopment. |
cpu.reopening.normalTarget |
number | leases | gauge | Autonomous lease-count target for the current brief/moderate/extended horizon; currently 0/1/6. |
cpu.reopening.effectiveTarget |
number | leases | gauge | Target currently governing capacity progression and admissions: the operator target while active, otherwise normalTarget. |
cpu.reopening.operatorTarget |
number | leases | gauge | Active operator lease-cap target, or 0 when no override is active. Use overrideActive to distinguish an inactive override from an explicit target of zero. |
cpu.reopening.overrideActive |
number | boolean | gauge | 1 while a valid operator lease-cap override is active; otherwise 0. |
cpu.reopening.stageAge |
number | game ticks | gauge | Ticks elapsed at the current numeric reopening-capacity level. The established Graphite path is retained for compatibility. |
cpu.reopening.bucketDelta |
number | CPU bucket units | gauge | Bucket change since the current capacity level began; a negative value indicates descent. |
cpu.reopening.peakBucketLoss |
number | CPU bucket units | gauge | Nonnegative bucket loss from the latest peak reached at the current capacity level; more than 250 points backs capacity down exactly one level. |
cpu.reopening.estimatedChargedCpu |
number | CPU per tick | gauge | Governor EWMA converted back to comparable estimated engine-charged CPU, including the observability offset for calculated bucket observations. |
cpu.enhancements.capacity |
number | leases | gauge | Separate enhancement capacity: 0 under constrained/recovery/emergency CPU or critical Memory, 1 under moderate abundance, and at most 2 under abundant extended-horizon conditions. |
cpu.enhancements.active |
number | leases | gauge | Number of active enhancement leases. It may be lower than capacity when owners report no useful marginal work. |
cpu.enhancements.granted.<workClass> |
number | boolean | gauge | 1 while the named work class has both a valid base lease and enhancement lease; otherwise 0. The fixed leaves are scouting, intelligence, logistics, infrastructure, mineralDevelopment, and remoteDevelopment, so cpu.enhancements.granted.* selects only comparable owner booleans. |
cpu.enhancements.grants |
number | leases | cumulative counter | Enhancement grants since the compact allocator state was initialized. |
cpu.enhancements.revocations |
number | leases | cumulative counter | Enhancement leases ended by expiry or prompt invalidation since allocator initialization. |
cpu.limit |
number | CPU per tick | gauge | Current Game.cpu.limit. |
cpu.observed.used |
number | CPU per tick | interval gauge | Average CPU actually charged by the engine since the previous observation, derived as cpu.limit - bucket change / elapsed ticks. Unlike cpu.used, this includes charges applied after user JavaScript returns, including memory serialization. The metric is omitted until a prior sample exists and whenever either bucket sample is 0 or 10,000, because saturation hides the true bucket change. |
cpu.targets.observabilityOffset |
number | CPU per tick | gauge | Allowance subtracted only from observed engine-charge samples before they enter the governor EWMA. Add it to each baseline target to obtain that target's effective observed-CPU threshold. It is not applied to cpu.used fallback samples. |
cpu.targets.abundantUsed |
number | CPU per tick | gauge | Baseline cpuPopulationAbundantUsedTarget configuration value. The effective observed-CPU target is this value plus observabilityOffset. |
cpu.targets.used |
number | CPU per tick | gauge | Baseline cpuPopulationUsedTarget configuration value. The effective observed-CPU target is this value plus observabilityOffset. |
cpu.targets.ceiling |
number | CPU per tick | gauge | Baseline cpuPopulationUsedCeiling configuration value. The effective observed-CPU ceiling is this value plus observabilityOffset. |
cpu.used |
number | CPU | per-tick gauge | Latest practical Game.cpu.getUsed() reading from the outer loop wrapper. When screeps-profiler is enabled, this value is updated after the profiler wrapper completes its per-tick bookkeeping. It still cannot include engine work charged after user JavaScript returns or the cost of assigning the final value itself. |
cpu.profile.sections.memoryParse |
number | CPU | per-tick gauge | CPU charged to the deliberate first Memory.creeps access, including Screeps memory deserialization. This does not include engine serialization after the loop returns. |
cpu.profile.sections.memoryGovernor |
number | CPU | per-tick gauge | CPU used by the Memory Governor coordinator branch. Ordinary ticks perform only a cadence check; every 250 ticks it reads one serialized-memory length and updates compact state. Elevated/critical evaluations may invoke the bounded CIA owner pass. |
cpu.profile.sections.cpuPopulationPolicy |
number | CPU | per-tick gauge | CPU used updating the global CPU-aware population policy before normal room and creep execution. |
cpu.profile.sections.cleanDeadCreepMemory |
number | CPU | per-tick gauge | CPU used only to initialize the creep-memory map when absent and delete stale creep memory after parsing. |
cpu.profile.sections.memoryCompaction |
number | CPU | per-tick gauge | CPU used by the versioned persistent-Memory compaction migration and its 500-tick bounded intelligence-retention maintenance. The migration handles at most ten room records per tick. |
cpu.profile.sections.boostedWorkforce |
number | CPU | per-tick gauge | CPU used by temporary boosted-creep lifecycle execution. It is an effectively zero-cost slot-existence check when no provider has active provisioning. |
cpu.profile.sections.ownedRoomDiscovery |
number | CPU | per-tick gauge | CPU used discovering visible owned rooms. |
cpu.profile.sections.creepIndex |
number | CPU | per-tick gauge | CPU used by the single tick-local whole-creep indexing pass. |
cpu.profile.sections.colonyTargetDiscovery |
number | CPU | per-tick gauge | CPU used discovering active colony targets that do not yet have an owned spawn and should therefore bypass ordinary owned-room management. |
cpu.profile.sections.roomManagers |
number | CPU | per-tick gauge | CPU used by all owned-room RoomManager executions, including context collection and room-level orchestration. |
cpu.profile.sections.interColonyAssistance |
number | CPU | per-tick gauge | CPU used by the once-per-tick bounded assistance coordinator after room management. It reuses tick-local room contexts and persisted economy assessments; assigned-creep movement remains in room creep execution. |
cpu.profile.sections.scouts |
number | CPU | per-tick gauge | CPU used by global scout execution. Emits 0 when scout execution is suppressed by emergency CPU austerity mode. |
cpu.profile.sections.remoteHarvesters |
number | CPU | per-tick gauge | CPU used by global remote harvester execution. |
cpu.profile.sections.depositHarvesters |
number | CPU | per-tick gauge | CPU used by the globally bounded self-hauling deposit worker. It remains scheduled during wind-down so useful cargo can evacuate. |
cpu.profile.sections.remoteReservers |
number | CPU | per-tick gauge | CPU used by global remote reserver execution. |
cpu.profile.sections.remoteConstructionBuilders |
number | CPU | per-tick gauge | CPU used only by globally dispatched builders executing remote-construction assignments. Colonization pioneers are reported separately. |
cpu.profile.sections.colonizers |
number | CPU | per-tick gauge | CPU used by globally dispatched colonizer creeps executing colony-bootstrap work. |
cpu.profile.sections.colonizationPioneers |
number | CPU | per-tick gauge | CPU used by ordinary builder creeps executing colonization-pioneer assignments. |
cpu.profile.sections.remoteHaulingHaulers |
number | CPU | per-tick gauge | CPU used by global remote hauling hauler execution. |
cpu.profile.sections.labSnapshotPublication |
number | CPU | per-tick gauge | CPU used by Screeps Lab snapshot publication work. |
cpu.profile.sections.strategicAssessments |
number | CPU | per-tick gauge | CPU used refreshing strategic room assessments. Emits 0 when no CIA work is due or Launch Control has not admitted intelligence, as well as during recovery/emergency suppression. |
cpu.profile.sections.depositOpportunities |
number | CPU | per-tick gauge | CPU used by the 25-tick advisory deposit evaluator. Emits 0 when the cadence is not due, intelligence work is not admitted, or CPU recovery/emergency suppresses optional work. |
cpu.profile.sections.statsCollection |
number | CPU | per-tick gauge | CPU used by the measured stats-collection work beginning at the collectStats() call. This section does not include the later outer-wrapper overwrite of cpu.used, engine work after user JavaScript returns, or profiler bookkeeping performed outside runScreepsLoop(). |
For a Grafana state-timeline or status-history panel, query
screeps.cpu.governor and configure value mappings for 0=open,
2=recovery, and 3=emergency. Historical value 1 represents the retired
managed-descent posture.
The global section profile is intended for attribution, not exact reconciliation with cpu.used. cpu.used is a cumulative reading taken as late as practical, while cpu.profile.sections.* contains individually measured execution regions. Differences can include section-timing overhead, work outside named sections, screeps-profiler wrapper activity, the final telemetry assignment, and Screeps engine costs occurring after user JavaScript returns.
cpu.observed.used is calculated once during stats collection from a two-number
sample retained in Memory.cpuObservation. The CPU observer calculates it near
the start of every tick and uses it as the newest input to its completed-tick
utilization EWMA. The resulting grade advises the bucket governor but is not a
second operating-tier authority. At bucket boundaries, where the observed
charge is unavailable, observation falls back to its late prior-tick
Game.cpu.getUsed() sample. Stats collection reuses the same idempotent sample
later in the tick. The calculation performs no game-object discovery.
Top-level sections and per-room or per-role sections can describe overlapping dimensions of the same execution. For example, globally dispatched colonizers contribute to cpu.profile.sections.colonizers and can also contribute to a room-level creeps.colonizer metric based on their physical room. These values must not be added together as independent CPU consumption.
Per-room tower profiling pairs the cpu.profile.rooms.<roomName>.towers CPU
gauge with per-tick action counts under
cpu.profile.rooms.<roomName>.towerActions.{attack,heal,repair,idle}. The four
action counters describe actual tower decisions made during the profiled tick;
compare their sum and mix with tower CPU to distinguish useful work from idle
selection overhead. Action recording reuses the selected action and performs no
additional game-object discovery.
The per-room roomIntelligence, remoteOperations, infrastructure, and
logisticsNetwork CPU gauges contain the full strategic pass only when their
stable phase and applicable Launch Control lease both allow it. Skipped ticks
contain only orchestration and required lightweight preparation, so compare
these series with a moving average that covers both cadence and lease windows.
Visible remote risk can force an unscheduled remoteOperations pass, but it
does not bypass remote-development readiness or emergency admission.
GCL
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
gcl.level |
number | GCL level | gauge | Current Game.gcl.level. |
gcl.progress |
number | GCL progress | gauge | Current progress toward next GCL level. |
gcl.progressTotal |
number | GCL progress | gauge | Required progress for next GCL level. |
Bounded Market Autonomy
These global values are exported under market. Resource and candidate keys
come only from the fixed enabled surplus graph; they do not include order IDs,
rooms, counterparties, or historical samples.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
market.autonomy.mode |
number | enum | gauge | Surplus authority: 0=manual, 1=autonomous. |
market.autonomy.evaluatedAt |
number | game ticks | gauge | Tick of the retained current evaluation. |
market.autonomy.selectedPath |
number | enum | gauge | Current winner: 0=none, 1=raw, 2=compressed, 3=compound, 4=independent. |
market.autonomy.grossAdvantageCredits |
number | credits | gauge | Selected processing candidate's gross executable advantage over its raw or independent baseline. |
market.autonomy.grossAdvantageRatio |
number | ratio | gauge | Gross advantage divided by baseline gross value. |
market.autonomy.requiredProcessingPremium |
number | ratio | gauge | Minimum gross advantage required before Factory or Lab processing is accepted. |
market.autonomy.eligibility.cpu |
number | boolean | gauge | 1 when CPU emergency does not block evaluation/execution. |
market.autonomy.eligibility.economy |
number | boolean | gauge | 1 when all evaluated rooms pass hard economy gates. |
market.autonomy.eligibility.processing |
number | boolean | gauge | 1 when processing may start after economy, CPU, and operator-work protection. |
market.autonomy.eligibility.sale |
number | boolean | gauge | 1 when bounded immediate sale execution is currently available. |
market.autonomy.eligibility.active |
number | boolean | gauge | 1 while the retained autonomous plan is active. |
market.autonomy.resources.<resource>.executableUnitPrice |
number | credits/resource unit | gauge | Weighted current buy-order price for enough executable volume to cover the evaluated output. |
market.autonomy.resources.<resource>.quoteAvailable |
number | boolean | gauge | 1 when the corresponding executable quote is present. |
market.autonomy.candidates.<candidate>.normalizedCredits |
number | credits | gauge | Gross executable value normalized to the candidate comparison's exact raw-input basis. |
market.autonomy.candidates.<candidate>.creditsPerRawInput |
number | credits/raw unit | gauge | Gross executable credits divided by all raw input units. |
market.autonomy.candidates.<candidate>.eligible |
number | boolean | gauge | 1 when the candidate has capability and executable quote coverage. |
market.autonomy.candidates.<candidate>.selected |
number | boolean | gauge | 1 for the retained winning candidate. |
market.realized.unitPrice.current |
number | credits/resource unit | gauge | Unit price of the latest successful autonomous sale execution, separate from evaluation quotes. |
market.realized.amount.current |
number | resource units | gauge | Amount in the latest successful autonomous sale execution. |
market.realized.grossCredits.current |
number | credits | gauge | Gross credits in the latest successful autonomous sale execution. |
market.realized.tick.current |
number | game ticks | gauge | Tick of the latest successful autonomous sale execution. |
The evaluator runs at most once per 25 ticks and stores only the current
recommendation. Graphite/Grafana remains the historical store. Per-room wrapper
cost is visible at cpu.profile.rooms.<roomName>.marketAutonomy; after the first
room invocation each tick, later invocations return from a tick-local guard.
Server Tick Speed
server.tick is emitted only after enough valid wall-clock samples exist.
The first tick after deploy or Memory reset may omit it.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
server.tick.duration.current |
number | seconds | gauge | Elapsed wall-clock seconds since the previous main loop execution. |
server.tick.duration.avg1m |
number | seconds | gauge | Average tick duration over the last 60 seconds. |
server.tick.duration.avg5m |
number | seconds | gauge | Average tick duration over the last 300 seconds. |
server.tick.duration.avg15m |
number | seconds | gauge | Average tick duration over the last 900 seconds. |
server.tick.estimatedTicksPerHour |
number | ticks/hour | gauge | 3600 / duration.avg5m. |
server.tick.trend |
number | seconds | signed gauge | duration.avg1m - duration.avg5m; positive means recent ticks are slower. |
server.tick.trendPercent |
number | percent | signed gauge | Tick-speed trend normalized against duration.avg5m. |
Colony Autonomy
Room autonomy is a compact projection of already-calculated room context, effective workforce, economy, spawn, and population-plan state. It performs no additional room searches or pathfinding.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
rooms.<roomName>.autonomy.state |
number | enum | gauge | 0=operational, 1=recovering-workforce, 2=recovering-economy, 3=blocked. |
rooms.<roomName>.autonomy.localWorkforce |
number | creeps | gauge | Creeps whose explicit home room is this colony. |
rooms.<roomName>.autonomy.effectiveHarvesters |
number | creeps | gauge | Effective local harvesters, including spawning creeps. |
rooms.<roomName>.autonomy.effectiveHaulers |
number | creeps | gauge | Effective local haulers, including spawning creeps. |
rooms.<roomName>.autonomy.spawnAvailable |
number | boolean | gauge | 1 when an owned local spawn is idle. |
rooms.<roomName>.autonomy.canSelfRecover |
number | boolean | gauge | 1 when production exists or an idle local spawn can afford the 200-energy recovery harvester. |
rooms.<roomName>.autonomy.managementHealthy |
number | boolean | gauge | 0 when this room's manager threw during the current tick; other rooms continue. |
rooms.<roomName>.autonomy.lastFailureTick |
number | game tick | gauge | Tick of the latest bounded room-management failure, or 0. |
colony.ownedRooms |
number | rooms | gauge | Visible owned rooms discovered this tick. |
colony.managedRooms |
number | rooms | gauge | Rooms that produced an autonomy summary this tick. |
colony.operationalRooms |
number | rooms | gauge | Managed rooms in the operational state. |
colony.recoveringRooms |
number | rooms | gauge | Managed rooms recovering workforce or economy. |
colony.blockedRooms |
number | rooms | gauge | Managed rooms unable to self-recover. |
colony.managementFailures |
number | rooms | gauge | Room-manager failures recorded this tick. |
colony.localCreeps |
number | creeps | gauge | Sum of local workforce across produced room summaries. |
colony.activeRemoteOperations |
number | operations | gauge | Sum of explicitly home-owned active remote operations across produced room summaries. |
Inter-Colony Energy Assistance
These recipient-scoped gauges are exported under
rooms.<roomName>.interColonyAssistance. They project the compact policy record
without rescanning game state. Donor room names and creep names remain in debug
Memory only and are deliberately excluded from numeric telemetry.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
state |
number | enum | gauge | 0=inactive, 1=denied, 2=active, 3=suspended, 4=completed. |
requesting |
number | boolean | gauge | 1 while the recipient is denied, active, or suspended and has not reached its hysteresis recovery threshold. |
deficit |
number | energy | gauge | Energy required to reach the current recovery reserve. |
recoveryReserve |
number | energy | gauge | Reserve level that releases the latched request and rearms future admission. |
requestEnergy |
number | energy | gauge | Current bounded requested grant, capped at 10,000 energy. |
donorBudget |
number | energy | gauge | Selected donor's currently safe EconomyManager surplus budget; zero when no donor is selected. |
authorizedEnergy |
number | energy | gauge | Energy authorized for the current bounded grant. |
transferredEnergy |
number | energy | gauge | Energy delivered into the recipient's normal delivery priorities during the current grant. |
assignedCreep |
number | boolean | gauge | 1 when the record names a live or spawning assistance hauler. |
Owned-Room Creep Population
These values are exported under rooms.<roomName>.creeps.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
current.<role> |
number | creeps | gauge | Current living creeps of the role in the room snapshot. |
desired.<role> |
number | creeps | gauge | Desired count from the current population plan. |
<role>.current |
number | creeps | gauge | Compatibility path for the same current count. |
<role>.desired |
number | creeps | gauge | Compatibility path for the same desired count. |
Memory.rooms[<roomName>].stats.creeps.total exists as an internal population
cache, but total.current and total.desired are not projected into
Memory.stats.
Planned And Current Creep Bodies
These values are exported under rooms.<roomName>.creeps.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
body.<role>.cost |
number | energy | gauge | Cost of the body currently selected by spawn planning. |
body.<role>.size |
number | body parts | gauge | Size of the planned body. |
body.<role>.techTier |
number | tier index | gauge | 1-based configured body option index selected by the economy-aware body policy after technical eligibility, economic approval, and current affordability, or 0 when no body is selectable. |
body.<role>.harvesterFullTierLockActive |
number | boolean flag | gauge | 1 when the local harvester full-tier Storage reserve lock is active for the planned body or current wait state; omitted for unrelated roles/states. |
body.<role>.harvesterFullTierLockStorageEnergy |
number | energy | gauge | Primary owned Storage energy used to evaluate the local harvester full-tier lock. |
body.<role>.harvesterFullTierLockStorageCapacity |
number | energy capacity | gauge | Primary owned Storage capacity used to evaluate the local harvester full-tier lock. |
body.<role>.harvesterFullTierLockStorageReserveRatio |
number | ratio | gauge | Primary owned Storage fill ratio used by the local harvester full-tier lock. |
body.<role>.harvesterFullTierLockThreshold |
number | ratio | gauge | Configured primary Storage fill threshold for the local harvester full-tier lock. |
body.<role>.approvedBodyWaitActive |
number | boolean flag | gauge | 1 when body planning is intentionally waiting for the approved body rather than selecting an immediately affordable smaller body. |
body.<role>.recoveryFallbackActive |
number | boolean flag | gauge | 1 when the selected body is an immediate recovery fallback. |
currentBody.<role>.cost |
number | energy | gauge | Average actual body cost of living creeps for the role. |
currentBody.<role>.size |
number | body parts | gauge | Average actual body size of living creeps for the role. |
currentBody.<role>.techTier |
number | tier index | gauge | Average exact configured body tier of living creeps; 0 for no creeps or unmatched bodies. |
<role>.body.cost |
number | energy | gauge | Compatibility path for planned body cost. |
<role>.body.size |
number | body parts | gauge | Compatibility path for planned body size. |
<role>.body.techTier |
number | tier index | gauge | Compatibility path for planned body tier. |
<role>.currentBody.cost |
number | energy | gauge | Compatibility path for current-body cost. |
<role>.currentBody.size |
number | body parts | gauge | Compatibility path for current-body size. |
<role>.currentBody.techTier |
number | tier index | gauge | Compatibility path for current-body tier. |
The rich body policy explanation is stored in
Memory.rooms[<roomName>].stats.creeps.<role>.bodySelection, not projected as
free-form Memory.stats leaves. It includes optionName, selected techTier,
cost, size, reason, fallbackUsed, highestEligibleTechTier, and
highestEconomicallyApprovedTechTier. Local harvester selections also include
full-tier lock context, wait state, and recovery fallback state. Use
debug.body(roomName?) for the operator-facing view.
Harvester body tier 5 is the five-WORK source-saturating body. The four-WORK
RCL 4 harvester remains tier 4 and is still selected as a recovery or bounded
wait fallback. Completed owned Storage at or above the configured healthy
reserve threshold can lock local harvester approval to the highest technically
eligible tier despite transient economy noise; emergency and zero-production
recovery still override that lock. RCL 5 mature role tiers are hauler
bulk-logistics at cost 900, upgrader surplus-controller at cost 950, and
builder heavy-construction at cost 1000; RCL 5 only makes these technically
eligible, and economy/role pressure must still approve them.
Local Mineral Pilot
These numeric values are exported under rooms.<roomName>.minerals. Mineral
IDs and types are deliberately excluded from metric paths.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
available |
number | mineral units | gauge | Mineral remaining in the visible room deposit. |
containerAmount |
number | mineral units | gauge | Amount of the room mineral in the assigned adjacent container. |
containerFreeCapacity |
number | resource units | gauge | Capacity available to the room mineral in that container. |
minerActive |
number | boolean | gauge | 1 when a living, non-spawning mineral miner is assigned to the room. |
minerDesired |
number | creeps | gauge | Current policy demand, limited to 0 or 1. |
harvested |
number | mineral units/tick | per-tick gauge | Mineral estimated from successful harvest actions this tick. |
harvestAttempts |
number | actions/tick | per-tick gauge | Harvest calls issued; cooldown idle ticks do not increment it. |
harvestSuccesses |
number | actions/tick | per-tick gauge | Harvest calls returning OK. |
transferAmount |
number | mineral units/tick | per-tick gauge | Mineral transferred into the assigned container. |
extractorCooldown |
number | ticks | gauge | Current completed extractor cooldown. |
blockedContainerFull |
number | boolean | gauge | 1 when container capacity blocks extraction. |
blockedCpu |
number | boolean | gauge | 1 when constrained/critical policy or emergency austerity suppresses demand. |
blockedEconomy |
number | boolean | gauge | 1 when economy eligibility or workforce recovery suppresses demand. |
depleted |
number | boolean | gauge | 1 when the mineral deposit is depleted. |
The mineral policy and role reuse the room context and their compact per-tick
summary; stats collection does not rediscover targets or recompute eligibility.
Policy evaluation and miner population demand require a Launch Control
mineralDevelopment lease. Minerals stop in the adjacent container in this
milestone.
Mineral policy CPU is visible at
cpu.profile.rooms.<roomName>.mineralOperation, while role execution is included
in cpu.profile.rooms.<roomName>.creeps.mineralMiner.
Operator-directed Factory manager CPU is visible at
cpu.profile.rooms.<roomName>.factory. The first Factory milestone adds no
Factory business telemetry: inactive rooms return before recipe or structure
work, and operators use debug.factory() for lifecycle inspection.
Energy Gained, Used, And Net
These values are exported under rooms.<roomName>.energy.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
gained.tick |
number | energy/tick | per-tick gauge | Energy gained during the current tick, or 0 when stale. |
used.tick |
number | energy/tick | per-tick gauge | Energy used during the current tick, or 0 when stale. |
net.tick |
number | energy/tick | signed per-tick gauge | gained.tick - used.tick. |
Energy transfers, withdraws, pickups, and container movement are intentionally ignored so internal logistics do not double-count the same energy.
Harvesting
These values are exported under rooms.<roomName>.energy,
rooms.<roomName>.harvesters, and rooms.<roomName>.sources.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
energy.harvest.capacity.tick |
number | energy/tick | per-tick gauge | Theoretical current harvest capacity from living, non-spawning harvesters assigned to visible room sources, using active WORK parts and capping each source at its natural 10 energy/tick production. Walking, blocked, full, or otherwise interrupted harvesters still count if they have body-and-assignment capacity. |
harvesters.averageWorkParts |
number | active WORK parts |
gauge | Average active WORK parts across living, non-spawning room harvesters; 0 when there are no harvesters. This uses damaged-body state, not the configured body tier. |
harvesters.active |
number | creeps | gauge | Living, non-spawning room harvesters. This is population, not successful harvest action count. |
harvesters.moving |
number | creeps | per-tick gauge | Unique room harvesters whose harvester workflow chose movement toward their assigned source or source container this tick. |
harvesters.idle |
number | creeps | per-tick gauge | Living, non-spawning room harvesters whose current-tick diagnostic state remained idle after room creep execution. |
harvesters.repairing |
number | creeps | per-tick gauge | Unique room harvesters that performed harvester-owned repair work this tick. Current harvester behavior does not repair, so this is normally 0 and reserved for future harvester repair behavior. |
harvesters.successfulHarvests |
number | harvest actions | per-tick gauge | Count of room harvester creep.harvest() calls that returned OK. This is an action count, not an energy amount. |
harvesters.harvestAttempts |
number | harvest actions | per-tick gauge | Count of room harvester creep.harvest() calls this tick, regardless of return code. Movement that does not call creep.harvest() is not an attempt. |
harvesters.failedHarvests |
number | harvest actions | per-tick gauge | Count of room harvester creep.harvest() calls returning anything other than OK. |
harvesters.energyHarvested |
number | energy/tick | per-tick gauge | Actual estimated energy successfully harvested by room harvesters this tick. |
harvesters.expectedHarvestEnergy |
number | energy/tick | per-tick gauge | Expected energy represented by harvester harvest attempts before the Screeps result, using the same bounded estimate as energy.gained.tick: active WORK parts, source energy, creep free capacity, and container free capacity under the creep. |
harvesters.missedHarvestEnergy |
number | energy/tick | per-tick gauge | max(expectedHarvestEnergy - energyHarvested, 0). |
harvesters.unresolvedSource |
number | creeps | per-tick gauge | Unique room harvesters that could not resolve their assigned sourceId this tick. |
harvesters.notOnContainer |
number | creeps | per-tick gauge | Unique room harvesters with an assigned source container that were not standing on it this tick. |
harvesters.noSourceContainer |
number | creeps | per-tick gauge | Unique room harvesters whose assigned source did not have a completed adjacent source container this tick, so the bootstrap fallback path was used. |
harvesters.sourceEmpty |
number | harvest attempts | per-tick gauge | Harvester harvest attempts where the source had 0 energy immediately before the attempt. |
harvesters.capacityBlocked |
number | creeps | per-tick gauge | Unique room harvesters whose expected harvest energy was 0 because both creep free energy capacity and the container under the creep had no free energy capacity. |
harvesters.results.ok |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning OK. |
harvesters.results.notInRange |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_NOT_IN_RANGE. |
harvesters.results.notEnoughResources |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_NOT_ENOUGH_RESOURCES. |
harvesters.results.full |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_FULL, usually from no available creep/container harvest capacity. |
harvesters.results.invalidTarget |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_INVALID_TARGET. |
harvesters.results.noBodypart |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_NO_BODYPART. |
harvesters.results.busy |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_BUSY. |
harvesters.results.notOwner |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning ERR_NOT_OWNER. |
harvesters.results.other |
number | harvest actions | per-tick gauge | Harvester harvest attempts returning an unrecognized result code. |
sources.<sourceId>.harvest.tick |
number | energy/tick | per-tick gauge | Actual estimated energy successfully harvested from that visible source this tick. Visible sources with no successful harvest emit 0. |
sources.<sourceId>.harvest.attempts |
number | harvest actions | per-tick gauge | Harvester harvest attempts against this source. |
sources.<sourceId>.harvest.successful |
number | harvest actions | per-tick gauge | Harvester harvest attempts against this source returning OK. |
sources.<sourceId>.harvest.failed |
number | harvest actions | per-tick gauge | Harvester harvest attempts against this source returning anything other than OK. |
sources.<sourceId>.harvest.expected |
number | energy/tick | per-tick gauge | Expected energy represented by attempts against this source. |
sources.<sourceId>.harvest.missed |
number | energy/tick | per-tick gauge | max(expected - tick, 0) for this source. |
sources.<sourceId>.harvest.assignedHarvesters |
number | creeps | gauge | Living, non-spawning room harvesters assigned to this source. |
sources.<sourceId>.harvest.activeWorkParts |
number | active WORK parts |
gauge | Total active WORK parts on living, non-spawning room harvesters assigned to this source. |
sources.<sourceId>.harvest.energy |
number | energy | gauge | Source energy at stats collection time. |
sources.<sourceId>.harvest.ticksToRegeneration |
number | ticks | gauge | Source regeneration countdown at stats collection time, or 0 when unavailable. |
sources.<sourceId>.harvest.containerEnergy |
number | energy | gauge | Energy in the adjacent source container, or 0 when absent. |
sources.<sourceId>.harvest.containerFreeCapacity |
number | energy capacity | gauge | Free energy capacity in the adjacent source container, or 0 when absent. |
energy.harvest.capacity.tick is theoretical body/source capacity. It is not
actual harvested energy, and it does not include source-container backlog,
pickup, withdrawal, transfer, storage movement, or any non-harvest energy
source. The sum of sources.<sourceId>.harvest.tick for visible room sources
matches the room harvester portion of harvested energy.
Harvester telemetry covers only creeps whose role is harvester. Builder or
upgrader fallback harvests can still contribute to the general
energy.gained.* economy metrics, but they are intentionally excluded from
harvesters.* and sources.<sourceId>.harvest.* harvester diagnostics.
Per-harvester diagnostics remain transient in
Memory.rooms[roomName].harvest.byName for current-tick operational state such
as idle classification. They are intentionally not copied into Memory.stats:
creep names are unique across replacements, so exporting them would create an
unbounded Graphite series family. The transient map is rebuilt each tick from
living, non-spawning room harvesters and is therefore bounded by current
workforce size.
Diagnostic example: if energy.harvest.capacity.tick is 16,
harvesters.energyHarvested is 8, harvesters.harvestAttempts is 1, and
harvesters.moving is 1, then one harvester harvested and the other
harvester moved instead of making a harvest attempt. A missing attempt shows up
as low harvestAttempts plus aggregate idle, moving, or unresolvedSource
telemetry. Current-creep state can be inspected transiently at
Memory.rooms[roomName].harvest.byName[creepName].state. A failed attempt shows
up in failedHarvests, results.*, and per-source failed. Empty source
attempts increment sourceEmpty; full carry/container blockage increments
capacityBlocked and produces expected energy of 0. Current-creep state is
not part of exported telemetry.
In the mature source-container workflow, harvesters stand on the assigned
source container and attempt to harvest every tick. A full creep store does not
make expectedHarvestEnergy zero while the container under the creep still has
free energy capacity. state=4 is retained for bootstrap rooms with no source
container, where a full harvester may still deliver directly to spawn or
extensions.
Economy Assessment
These values are exported under rooms.<roomName>.economy.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
trend |
number | energy/tick | signed gauge | Compatibility alias for energyTrend. |
energyTrend |
number | energy/tick | signed gauge | Smoothed net energy trend from cumulative gained/used totals. |
strategicSurplusGrade |
number | 0=inactive, 1=building, 2=sustained, 3=overflow |
gauge | Compatibility grade using the strategic surplus state mapping. |
status |
number | 0=starved, 1=strained, 2=stable, 3=surplus |
gauge | Economy reserve health. |
mode |
number | 0=normal, 1=emergency |
gauge | Active economy operating mode. |
stored.ratio |
number | ratio 0-1 | gauge | Stored energy divided by effective energy capacity across tracked room reserves. |
stored.energy |
number | energy | gauge | Stored energy across tracked room reserves. |
stored.capacity |
number | energy capacity | gauge | Effective energy capacity across tracked room reserves after protected native-mineral and other non-energy Storage occupancy. |
primaryStorage.energy |
number | energy | gauge | Energy in completed owned storage when available. |
primaryStorage.capacity |
number | energy capacity | gauge | Effective energy capacity of completed owned Storage after protected native-mineral and other non-energy occupancy. |
sourceContainers.energy |
number | energy | gauge | Energy in source-side containers from the latest assessment. |
sourceContainers.capacity |
number | energy capacity | gauge | Capacity of source-side containers from the latest assessment. |
controllerContainers.energy |
number | energy | gauge | Energy in controller-side containers from the latest assessment. |
controllerContainers.capacity |
number | energy capacity | gauge | Capacity of controller-side containers from the latest assessment. |
construction.remaining |
number | build progress | gauge | Remaining construction progress from the latest assessment. |
desired.builder |
number | creeps | gauge | EconomyManager desired builder count. |
desired.upgrader |
number | creeps | gauge | EconomyManager desired upgrader count. |
When construction.remaining is positive, desired.builder may recover from
zero to one even while optional-worker reserve is unavailable. Counts above one
retain the normal reserve and cooldown policy. desired.upgrader is unchanged.
economy.energyTrend is already a signed gauge. Do not treat it as a
monotonic counter.
For rooms with primary storage, economy status uses the operating reserve and energy trend rather than source-container fill. Low source-container fill can indicate prompt hauling instead of weak supply. Rooms without primary storage continue to use source-container fill as a reserve-health signal.
Reserve Policy
These values are exported under rooms.<roomName>.economy.reserve.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
energy |
number | energy | gauge | Active reserve energy. |
minimum |
number | energy | gauge | Minimum operating reserve. |
target |
number | energy | gauge | Target storage reserve. |
surplusThreshold |
number | energy | gauge | Reserve amount used as the surplus threshold. |
operatingDeficit |
number | energy | gauge | Energy missing from the minimum reserve. |
targetDeficit |
number | energy | gauge | Energy missing from the target reserve. |
surplus |
number | energy | gauge | Energy above the surplus threshold. |
canSpendFromReserve |
number | boolean | gauge | 1 when reserve-backed spending is currently allowed. |
canSpendOnOptionalWork |
number | boolean | gauge | 1 when optional work is allowed. |
canSpendOnSurplusWork |
number | boolean | gauge | 1 when surplus work is allowed. |
shouldStoreEnergy |
number | boolean | gauge | 1 when haulers should continue filling storage before optional delivery. |
Emergency Economy
These values are exported under rooms.<roomName>.economy.emergency.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
active |
number | boolean | gauge | 1 when emergency economy mode is active or recovering. |
enteredAt |
number | game tick | gauge | Tick when emergency mode was entered, or 0 when absent. |
exitReserveEnergy |
number | energy | gauge | Reserve energy required to exit emergency mode. |
Strategic Surplus
These values are exported under rooms.<roomName>.economy.strategicSurplus.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
state |
number | 0=inactive, 1=building, 2=sustained, 3=overflow |
gauge | Strategic surplus state. |
active |
number | boolean | gauge | 1 for sustained or overflow; otherwise 0. |
enteredAt |
number | game tick | gauge | Tick when the current strategic surplus state was entered, or 0 when absent. |
duration |
number | ticks | gauge | Duration of the current state. |
reserveSurplusEnergy |
number | energy | gauge | Reserve energy above the surplus threshold. |
storageFillRatio |
number | ratio 0-1 | gauge | Storage fill pressure used by the assessment. |
storageFreeCapacity |
number | energy capacity | gauge | Remaining effective energy deposit capacity in Storage, bounded by both physical free capacity and the protected native allocation. |
sourceContainerBacklogRatio |
number | ratio 0-1 | gauge | Source-container backlog pressure. |
sourceContainerOverflowCount |
number | containers | gauge | Number of source containers considered overflowing. |
overflowRisk |
number | boolean | gauge | 1 when overflow risk is detected. |
spendingLevel |
number | level | gauge | Numeric surplus spending level from the assessment. |
Maintenance
These values are exported under rooms.<roomName>.maintenance.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
critical.count |
number | jobs | gauge | Critical maintenance backlog count. |
important.count |
number | jobs | gauge | Important maintenance backlog count. |
normal.count |
number | jobs | gauge | Normal maintenance backlog count. |
backlog.score |
number | score | gauge | Aggregate maintenance backlog score. |
containers.averageHealth |
number | ratio 0-1 | gauge | Average tracked container health. |
containers.count |
number | structures | gauge | Count of tracked containers. |
roads.averageHealth |
number | ratio 0-1 | gauge | Average tracked road health. |
roads.count |
number | structures | gauge | Count of tracked roads. |
roads.important.averageHealth |
number | ratio 0-1 | gauge | Average health of important roads. |
roads.important.count |
number | structures | gauge | Count of important roads. |
roads.normal.averageHealth |
number | ratio 0-1 | gauge | Average health of normal roads. |
roads.normal.count |
number | structures | gauge | Count of normal roads. |
roads.routeBacked.count |
number | roads | gauge | Visible owned-room roads represented by the current operational/degraded route-road value index. |
roads.routeBacked.candidates |
number | repair jobs | gauge | Route-backed roads currently eligible for maintenance after thresholds and budget gates. |
roads.routeBacked.repairBacklog |
number | structure hits | gauge | Missing hits across the current route-backed road maintenance candidates. |
energySpent.tick |
number | energy/tick | per-tick gauge | Estimated maintenance repair energy spent this tick. |
Room Energy And Controller State
These values are exported under rooms.<roomName>.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
energyAvailable |
number | energy | gauge | Current room spawn/extension energy. |
energyCapacityAvailable |
number | energy capacity | gauge | Current room spawn/extension energy capacity. |
controller.level |
number | RCL | gauge | Controller level, or 0 without a controller. |
controller.progress |
number | controller progress | gauge | Controller progress, or 0 without a controller. |
controller.progressTotal |
number | controller progress | gauge | Required progress for next RCL, or 0 without a controller. |
controller.ticksToDowngrade |
number | ticks | gauge | Ticks to controller downgrade, or 0 without a controller. |
controllerLevel |
number | RCL | gauge | Compatibility alias for controller.level. |
controllerProgress |
number | controller progress | gauge | Compatibility alias for controller.progress. |
controllerProgressTotal |
number | controller progress | gauge | Compatibility alias for controller.progressTotal. |
controllerTicksToDowngrade |
number | ticks | gauge | Compatibility alias for controller.ticksToDowngrade. |
constructionSiteCount |
number | sites | gauge | Current visible construction site count in the room. |
Containers
These values are exported under rooms.<roomName>.sourceContainers and
rooms.<roomName>.controllerContainers.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
count |
number | containers | gauge | Number of matching containers. |
energy |
number | energy | gauge | Total stored energy in matching containers. |
capacity |
number | energy capacity | gauge | Total energy capacity of matching containers. |
fillRatio |
number | ratio 0-1 | gauge | energy / capacity, or 0 when capacity is zero. |
Storage
These values are exported under rooms.<roomName>.storage.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
exists |
number | boolean | gauge | 1 when completed owned storage is visible; otherwise 0. |
used |
number | energy | gauge | Energy stored in storage. |
free |
number | energy capacity | gauge | Free energy capacity in storage. |
capacity |
number | energy capacity | gauge | Total energy capacity in storage. |
fillRatio |
number | ratio 0-1 | gauge | used / capacity, or 0 when capacity is zero. |
percent |
number | percent | gauge | fillRatio * 100. |
There is intentionally no storage.energy alias at this time.
Links
These values are exported under rooms.<roomName>.links.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
count |
number | links | gauge | Total completed owned links visible in the room. |
sourceCount |
number | links | gauge | Links classified within source range. |
controllerCount |
number | links | gauge | Links classified within controller range. |
storageCount |
number | links | gauge | Links classified within storage range. |
unclassifiedCount |
number | links | gauge | Owned links visible but not safely classified. |
energy |
number | energy | gauge | Total energy stored in owned links. |
capacity |
number | energy capacity | gauge | Total energy capacity of owned links. |
transfersAttempted |
number | intents | gauge | Link transfer attempts issued this tick. |
transfersCompleted |
number | transfers | gauge | Successful link transfers this tick. |
energyTransferred |
number | energy | gauge | Energy moved by successful link transfers this tick. |
energyTransferredTotal |
number | energy | counter | Cumulative successful link-transfer energy. |
energyReceived |
number | energy | gauge | Energy observed arriving at receiver links from successful transfers this tick. |
energyLoss |
number | energy | gauge | Difference between sent and observed received transfer energy this tick. |
routesUsable |
number | routes | gauge | Source-to-storage routes whose source link can send and whose receiver has configured free capacity. |
routesBlocked |
number | routes | gauge | Source links without a currently usable storage receiver route. |
cooldownBlocked |
number | routes | gauge | Source routes blocked by source-link cooldown while enough energy is present to send. |
receiverBlocked |
number | routes | gauge | Source routes blocked because the storage receiver lacks configured free capacity. |
routeMode |
number | enum | gauge | Last route: 0=none, 1=source-to-storage, 2=storage-to-controller, 3=source-to-controller. |
sourceToStorage.count |
number | transfers | counter | Cumulative successful source-link to storage-link transfers. |
sourceToStorage.energy |
number | energy | counter | Cumulative energy moved from source links to storage links. |
storageToController.count |
number | transfers | counter | Cumulative successful storage-link to controller-link transfers. |
storageToController.energy |
number | energy | counter | Cumulative energy moved from storage links to controller links. |
sourceToController.count |
number | transfers | counter | Cumulative successful direct source-link to controller-link transfers. |
sourceToController.energy |
number | energy | counter | Cumulative energy moved directly from source links to controller links. |
Link classification is derived from visible room state each tick and is not persisted by id. Controller-link feeding follows the same economy reserve policy as controller-container delivery, so emergency mode and protected storage reserve can suppress optional controller link transfers.
Logistics Network
These values are exported under rooms.<roomName>.logistics.network.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
knownRoutes |
number | routes | gauge | Non-retired logistics routes represented by the current room-owned network summary. |
operationalRoutes |
number | routes | gauge | Routes currently represented as operational by their adapter. |
degradedRoutes |
number | routes | gauge | Routes currently usable only with reduced or fallback capacity. |
blockedRoutes |
number | routes | gauge | Routes currently prevented by concrete blockers. Suspended and incomplete routes are not counted here. |
routeDemand |
number | energy or carry capacity | gauge | Sum of adapter-reported route demand. Local and link routes use current energy movement pressure; remote routes use the existing remote logistics carry-capacity requirement. |
availableTransportCapacity |
number | energy or carry capacity | gauge | Sum of adapter-reported currently available transport capacity. Blocked or suspended routes expose zero effective capacity. |
demandEnergy |
number | energy | gauge | Sum of currently movable route demand. This is the energy that is both available at sources and useful at destinations. |
movedEnergy |
number | energy | counter | Cumulative energy attributed by local, link, and remote executors to completed route-backed jobs. |
requiredCarryCapacity |
number | carry capacity | gauge | Sum of route-estimated creep carry capacity required to satisfy production and backlog pressure. Link-only routes contribute 0. |
assignedCarryCapacity |
number | carry capacity | gauge | Sum of effective assigned carry capacity reported by route summaries. |
backlog |
number | energy | gauge | Sum of qualifying source-side energy waiting for transport. |
expectedThroughput |
number | energy/tick | gauge | Sum of route-estimated service throughput. |
estimatedCycleTicks |
number | ticks | gauge | Sum of per-route estimated cycle ticks. Use for coarse fleet sizing visibility, not as an average. |
unservedDemand |
number | energy | gauge | Sum of destination demand not currently covered by movable source backlog. |
idleCarryCapacity |
number | carry capacity | gauge | Sum of assigned carry capacity estimated idle beyond route requirement. |
excessCarryCapacity |
number | carry capacity | gauge | Sum of effective assigned carry capacity above route requirement. |
capacityDeficit |
number | carry capacity | gauge | Sum of required carry capacity not covered by effective assigned capacity. |
jobsCreated |
number | jobs | counter | Cumulative route-backed jobs created in room logistics memory. |
jobsCompleted |
number | jobs | counter | Cumulative route-backed jobs completed in room logistics memory. |
jobsAbandoned |
number | jobs | counter | Cumulative route-backed jobs abandoned by route invalidation, blockage, retirement, or policy revocation. |
fallbackActivations |
number | transitions | counter | Bounded count of route fallback activation events retained in room logistics memory. It counts transitions, not ticks spent in fallback. |
activeRouteJobs |
number | jobs | gauge | Current non-completed and non-abandoned route-backed jobs retained in room logistics memory. |
preemptedAssignments |
number | assignments | counter | Cumulative represented route-job preemptions, currently recorded when urgent conventional delivery suspends optional link service. |
performance.actualThroughput |
number | energy/tick | gauge | Sum of compact per-route EWMA actual delivered throughput. |
performance.throughputEfficiency |
number | ratio | gauge | Mean route EWMA actual/expected throughput efficiency; route health and its named EWMA reason use the same metric when service is obligated. |
performance.averageCycleDuration |
number | ticks | gauge | Mean EWMA completed-cycle duration. |
performance.averageJobDuration |
number | ticks | gauge | Mean EWMA completed-job duration. |
performance.sourceBlockedTicks |
number | ticks | counter | Accumulated meaningful source-side blocked ticks. |
performance.destinationBlockedTicks |
number | ticks | counter | Accumulated meaningful destination-side blocked ticks. |
performance.routeUnavailableTicks |
number | ticks | counter | Accumulated topology, endpoint, lifecycle, visibility, or policy route-unavailable ticks; route state and blockers preserve the specific cause. |
performance.congestionTicks |
number | ticks | counter | Accumulated conservatively detected traffic-delay ticks. |
performance.fatigueDelayTicks |
number | ticks | counter | Accumulated intended-movement ticks with creep fatigue. |
performance.fallbackRate |
number | ratio 0..1 |
gauge | Mean per-route EWMA share of successful alternative completions: fallback completions divided by fallback plus preferred completions, or 0 when neither completed. |
performance.idleAssignedCapacity |
number | carry capacity | gauge | Sum of currently idle assigned route capacity. |
performance.idleCapacityRatio |
number | ratio | gauge | Mean idle/assigned route capacity. |
performance.backlogDelta |
number | energy/window | gauge | Sum of route backlog end minus window start. |
performance.abandonedInvalidRouteJobs |
number | jobs | counter | Jobs abandoned because a route disappeared, blocked, retired, or lost policy permission. |
performance.pathRecalculations |
number | calculations | counter | Meaningful existing infrastructure route-geometry recalculations. |
performance.healthyRoutes |
number | routes | gauge | Routes classified healthy with sufficient evidence. |
performance.watchRoutes |
number | routes | gauge | Routes under observation, including insufficient-sample routes. |
performance.degradedRoutes |
number | routes | gauge | Routes classified degraded by explainable thresholds. |
performance.criticalRoutes |
number | routes | gauge | Routes classified critical by explainable thresholds. |
infrastructure.fullySupportedRoutes |
number | routes | gauge | Current non-retired routes whose required known infrastructure is completed and healthy. |
infrastructure.partiallySupportedRoutes |
number | routes | gauge | Current non-retired routes with planned, approved, site-present, or unverified support and no known degrading failure. |
infrastructure.degradedRoutes |
number | routes | gauge | Current non-retired routes with damaged, invalid, or missing optional support or road gaps. This is infrastructure state, not the logistics route-state count above. |
infrastructure.blockedRoutes |
number | routes | gauge | Current non-retired routes with a known missing or invalid critical infrastructure endpoint. |
infrastructure.requiredComponents |
number | components | gauge | Required route-support components represented across current routes. |
infrastructure.completedComponents |
number | components | gauge | Required components currently represented by exact live structures; damaged structures remain physical completed components and also appear in damagedComponents. |
infrastructure.plannedOrApprovedComponents |
number | components | gauge | Required components currently represented as planned, pending approval, or approved intent rather than completed world facts. |
infrastructure.activeConstructionSites |
number | sites | gauge | Required components currently represented by exact matching construction sites. |
infrastructure.missingComponents |
number | components | gauge | Required components known to be absent at their expected positions. |
infrastructure.damagedComponents |
number | components | gauge | Completed route-support components below the integration health threshold. |
infrastructure.unverifiedComponents |
number | components | gauge | Required components whose current world state cannot be proven, commonly because a remote room is not visible or legacy support has not refreshed. |
infrastructure.routeBackedRoadSegments |
number | road segments | gauge | Known route-road coordinates across current route summaries. |
infrastructure.completedRoadSegments |
number | road segments | gauge | Route-road coordinates with completed live roads. |
infrastructure.plannedOrApprovedRoadSegments |
number | road segments | gauge | Route-road coordinates represented by planned or approved intent. |
infrastructure.activeRoadConstructionSites |
number | road sites | gauge | Route-road coordinates with matching construction sites. |
infrastructure.missingRoadSegments |
number | road segments | gauge | Known route-road coordinates without a completed road or matching site. A physically missing segment can also have planned or approved intent, so compare this with plannedOrApprovedRoadSegments. |
infrastructure.damagedRoadSegments |
number | road segments | gauge | Completed route-road coordinates whose roads are below the integration health threshold. |
infrastructure.roadCompletionRatio |
number | ratio 0..1 |
gauge | Weighted completed-to-required ratio across route-backed road segments; 0 when no route geometry is known. |
infrastructure.routeBackedMaintenanceCandidates |
number | roads | gauge | Damaged route-road segments projected from the current route infrastructure summaries. |
infrastructure.routeBackedRoadRepairBacklog |
number | structure hits | gauge | Missing road hits projected from current route infrastructure summaries. |
evaluated |
number | boolean 0/1 |
per-tick gauge | 1 when full logistics-network derivation ran for this room during the current tick, otherwise 0. |
skipped |
number | boolean 0/1 |
per-tick gauge | 1 when full derivation was skipped because the persisted summary was still within the configured cadence, otherwise 0. |
age |
number | ticks | gauge | Current non-negative tick age since Memory.rooms.<roomName>.logisticsNetwork.lastEvaluatedAt; immediately after evaluation this is 0. |
interval |
number | ticks | gauge | Configured base full logistics-network evaluation interval. Default: 25. Established rooms additionally wait for a stable five-tick room phase, producing an effective refresh age of 25-29 ticks while spreading CPU across rooms. |
This branch is intentionally aggregate and room-scoped. It does not emit route
IDs, object IDs, reason strings, or per-route metric branches, and it does not
add a .total companion metric.
Fallback performance events now require a successful correlated alternative
delivery; urgent preemption remains represented by preemptedAssignments.
Persisted cumulative activation counters created before this definition can
retain legacy pre-result evidence. Persisted EWMA rates are clamped to 0..1
during normalization, and success-only 25-tick windows keep subsequent EWMA
updates within the bounded completion-share definition.
Performance values are projected from already-rolled-up route summaries. Stats
collection does not scan creeps, inspect tiles, rerun health policy, or rebuild
route geometry. Per-route IDs and traffic coordinates remain debug/Memory-only,
keeping the Graphite namespace bounded and uniform. No property named
total is emitted under Memory.stats.
The nested infrastructure values are projected from the same persisted route
summaries used by debug output. Stats collection does not revalidate structures,
rebuild a route-road index, calculate a path, or rerun maintenance policy.
Infrastructure support lifecycle is separate from logistics route lifecycle, so
infrastructure.degradedRoutes need not equal the top-level degradedRoutes.
Full route derivation is cadence-bounded. The persisted route snapshot and
aggregate route fields can be up to the configured interval old; evaluated
and skipped are mutually exclusive current-tick 0/1 gauges that confirm
whether the route summary was refreshed or reused.
Haulers
These values are exported under rooms.<roomName>.haulers.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
jobs.directDelivery |
number | selections | per-tick gauge | Hauler conventional delivery selections this tick. |
jobs.loadSourceLink |
number | selections | per-tick gauge | Hauler load-source-link job selections this tick. |
jobs.unloadReceiverLink |
number | selections | per-tick gauge | Hauler unload-receiver-link job selections this tick. |
jobs.blocked |
number | jobs | per-tick gauge | Link jobs or assignments rejected because the route, source, or destination was no longer valid. |
linkService.active |
number | actions | per-tick gauge | Link-service withdraw or transfer actions that returned OK. |
linkService.moving |
number | actions | per-tick gauge | Link-service actions that moved toward a source or destination. |
linkService.idle |
number | actions | per-tick gauge | Link-service checks that found no useful job or ended without progress. |
coherence.acquisitionCandidates |
number | targets | per-tick gauge | Raw source-container, controller-buffer, and loose-energy evidence prepared once for the room. |
coherence.deliveryCandidates |
number | targets | per-tick gauge | Raw structures with energy capacity in the shared room evidence. |
coherence.urgentDeliveryCandidates |
number | targets | per-tick gauge | Spawn, extension, and below-buffer tower targets in shared evidence. |
coherence.selectedTargetChanges |
number | task changes | per-tick gauge | Hauler task assignments or clears that changed the persisted target. |
coherence.movementCalls |
number | calls | per-tick gauge | Actual hauler moveTo intents issued through the central helper after in-range, fatigue, and same-tick duplicate guards. |
coherence.movementTargetChanges |
number | changes | per-tick gauge | Issued movement calls whose stable target-and-required-range key differed from the prior issued call. |
coherence.sameSourceDeliveryRejections |
number | rejections | per-tick gauge | Ordinary delivery candidates rejected because they match the current load source. |
coherence.controllerBufferFallbackSelections |
number | selections | per-tick gauge | Controller-buffer fallback acquisition selections. |
coherence.preventedEnergyEchoes |
number | rejections | per-tick gauge | Semantically useless same-source energy returns prevented. |
looseEnergy.piles |
number | piles | per-tick gauge | Visible dropped-energy piles in the room. |
looseEnergy.amount |
number | energy | per-tick gauge | Exact visible dropped energy available to ordinary haulers. |
looseEnergy.gradedPressure |
number | energy-equivalent pressure | per-tick gauge | Dropped energy grouped by nearest source and rounded up in 500-energy quarter-container bands for logistics demand. |
looseEnergy.pressureEnabled |
number | boolean | per-tick gauge | 1 when owned Storage has effective deposit capacity and remains below the existing critical 95% fill threshold, allowing loose energy to affect hauler demand; otherwise 0. |
These metrics are workload signals, not role definitions. The same hauler role
still performs conventional source-container hauling. Candidate evidence is
rebuilt from live RoomContext objects every non-emergency tick, including CPU
bucket recovery, and is never serialized. Emergency CPU austerity emits the
documented zero-valued fallback instead of scanning optional evidence.
When looseEnergy.pressureEnabled is 1, graded pressure is added to the
nearest source-buffer backlog during the cadence-bounded logistics-network
evaluation. Existing route demand, idle-capacity vetoes, Launch Control
commitment, and population caps remain authoritative. At critical Storage fill
or without usable owned Storage capacity, haulers may still select loose energy
under the ordinary acquisition policy, but it does not request additional
haulers. Successful source-attributed pickups enter the same route collection
and delivery performance accounting as source-container loads.
Infrastructure Planning
These values are exported under rooms.<roomName>.infrastructure.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
planned |
number | planned structures | gauge | Planned infrastructure records in room memory. |
pendingApproval |
number | build orders | gauge | Build orders waiting for console approval. |
approved |
number | build orders | gauge | Build orders approved and waiting for normal room execution. |
blocked |
number | planned structures | gauge | Blocked or invalidated planned structures. |
sitePlaced |
number | planned structures | gauge | Planned structures with a known construction site. |
completed |
number | planned structures | gauge | Planned structures resolved to completed structures. |
links.planned |
number | planned links | gauge | Link planned-structure records. |
links.completed |
number | completed links | gauge | Planned links that resolved to completed structures. |
links.usableRoutes |
number | routes | gauge | Completed source-to-storage link routes in the infrastructure linkNetwork summary. |
events.count |
number | events | gauge | Bounded infrastructure event count retained in room memory. |
packages.known |
number | packages | gauge | Current aggregate Extension and Lab package records. |
packages.pendingApproval |
number | packages | gauge | Current package records whose lifecycle state is waiting for exact operator approval; terminal packages are excluded even when retained approval metadata records their earlier state. |
packages.approved |
number | packages | gauge | Current package records approved and waiting for normal execution; active and terminal packages are excluded. |
packages.blocked |
number | packages | gauge | Packages currently blocked by eligibility, validation, pacing, or capacity. |
packages.childrenCompleted |
number | child structures | gauge | Package child coordinates with matching completed structures. |
packages.childrenUnderConstruction |
number | child sites | gauge | Package child coordinates with matching construction sites. |
packages.childrenMissing |
number | child coordinates | gauge | Valid package child coordinates without a matching structure or site. |
packages.extensionProgress |
number | ratio 0..1 |
gauge | Completed child ratio across known extension-cluster packages, or 0 when none exist. |
remoteContainer.needed |
number | boolean 0/1 |
gauge | A home-owned remote source-container plan exists and is not completed. |
remoteContainer.proposed |
number | boolean 0/1 |
gauge | A remote source-container build order is pending operator approval. |
remoteContainer.approved |
number | boolean 0/1 |
gauge | A remote source-container build order has been approved and awaits placement/revalidation. |
remoteContainer.sitePresent |
number | boolean 0/1 |
gauge | A matching remote source-container construction site is represented by the plan. |
remoteContainer.completed |
number | boolean 0/1 |
gauge | A matching remote source container has completed. |
remoteContainer.blocked |
number | boolean 0/1 |
gauge | The remote source-container plan is blocked or invalidated. |
remoteRoads.plannedState |
number | enum | gauge | Current primary remote-road route state: 0 blocked/none, 1 pending approval, 2 approved/in progress, 3 complete. |
remoteRoads.approvedState |
number | boolean 0/1 |
gauge | 1 when the current primary remote-road route revision is approved. |
remoteRoads.pathLength |
number | path tiles | gauge | Serialized PathFinder path length for the current primary remote road. |
remoteRoads.roadTilesRequired |
number | road tiles | gauge | Number of route coordinates that still require or can host road infrastructure. |
remoteRoads.roadsCompleted |
number | road tiles | gauge | Approved route coordinates that currently have completed roads. |
remoteRoads.roadSitesActive |
number | road sites | gauge | Approved route coordinates that currently have road construction sites. |
remoteRoads.missingRoadTiles |
number | road tiles | gauge | Approved route coordinates without a completed road or matching road site. |
remoteRoads.damagedRoads |
number | road tiles | gauge | Completed primary remote-route roads below the remote-road damage threshold. |
remoteRoads.repairBacklogHits |
number | structure hits | gauge | Missing hits across damaged completed roads on the primary remote-road route. |
remoteRoads.completionRatio |
number | ratio | gauge | roadsCompleted / roadTilesRequired, or 0 when no route exists. |
remoteRoads.blockedState |
number | boolean 0/1 |
gauge | 1 when the route has a current blocked reason. |
remoteRoads.sitesPlacedTick |
number | sites/tick | per-tick gauge | Remote-road construction sites placed this tick by the infrastructure manager. |
remoteRoads.sitesPlacedTotal |
number | sites | cumulative counter | Total remote-road construction sites placed for the current route memory record. |
Infrastructure stats are numeric projections from
Memory.rooms[roomName].infrastructure. Detailed build-order IDs, positions,
candidate reasons, package IDs, package coordinates, event summaries, and route
endpoint IDs remain internal Memory/debug data to preserve the low-cardinality
stats contract. No package metric uses the reserved property name total.
Remote Operations
These values are exported under rooms.<roomName>.remoteOperations.
| Path | Type | Units | Treatment | Meaning |
|---|---|---|---|---|
candidate.eligible |
number | candidate rooms | gauge | Candidates whose passive assessment is currently eligible. |
candidate.blocked |
number | candidate rooms | gauge | Candidates blocked by a hard safety, policy, intelligence, or home-readiness gate. |
candidate.evaluating |
number | candidate rooms | gauge | Candidates still discovered/evaluating because intelligence or value is not strong enough. |
candidate.inactive |
number | candidate rooms | gauge | Retained candidates intentionally inactive or no longer adjacent. |
candidate.best.score |
number | 0..100 |
gauge | Highest current remote-operation score after deterministic ordering. |
candidate.best.sources |
number | sources | gauge | Source count of the highest-ranked retained candidate. |
candidate.best.homeReady |
number | boolean 0/1 |
gauge | Whether the highest-ranked candidate's home-readiness summary is ready. |
candidate.lastEvaluatedAt |
number | game tick | gauge | Last passive remote-operation evaluation tick for this home room. |
operation.active |
number | source objectives | gauge | Economically and allocation-admitted active source objectives across this home's remote rooms. |
operation.suspended |
number | operations | gauge | Suspended pilot operations retained for this home room. |
operation.state |
number | enum | state code | Pilot state: 0 none, 1 candidate, 2 active, 3 suspended, 4 unsafe. |
operation.threat |
number | enum | state code | Pilot threat: 0 none, 1 dormant tower/conditional, 2 tower operational or unknown, 3 hostile creeps. |
operation.intelligenceAge |
number | ticks | gauge | Age of the pilot target intelligence, or -1 when unavailable. |
creeps.harvesters |
number | creeps | gauge | Live remoteHarvester creeps assigned to this home room and a remote operation. |
creeps.builders |
number | creeps | gauge | Live ordinary builder creeps with a remote construction assignment for this home room. |
creeps.reservers |
number | creeps | gauge | Live remoteReserver creeps assigned to this home room. |
energy.harvested.tick |
number | energy | per-tick value | Energy successfully harvested by the assigned remote harvester this tick. |
energy.dropped.tick |
number | energy | per-tick value | Remote energy dropped locally or overflowed into a remote source container this tick. |
energy.hauled.tick |
number | energy | per-tick value | Energy withdrawn from the exact approved remote source container by assigned remote haulers this tick. |
energy.deliveredHome.tick |
number | energy | per-tick value | Remote-attributed energy delivered into an eligible home-room delivery target this tick. |
energy.inTransit |
number | energy | gauge | Energy currently carried by assigned remote haulers for this home room. |
energy.delivery.ratio |
number | ratio 0..1 |
ratio | Lifetime delivered-home energy divided by lifetime harvested energy, bounded to 0 when no remote harvest has been recorded. |
harvest.activeTicks |
number | creep-ticks | cumulative lifetime counter | Remote-harvester ticks where a harvest action succeeded. |
harvest.travelTicks |
number | creep-ticks | cumulative lifetime counter | Remote-harvester movement ticks toward the remote room, source, or source container. |
harvest.retreatTicks |
number | creep-ticks | cumulative lifetime counter | Remote-harvester retreat movement ticks while the operation is not active. |
harvest.utilization |
number | ratio 0..1 |
ratio | activeTicks / (activeTicks + travelTicks + retreatTicks). |
haul.authorized |
number | boolean 0/1 |
gauge | A valid active operation and exact completed approved remote container currently authorize remote hauling. |
haul.assigned |
number | creeps | gauge | Active assigned remote haulers for this home room. |
haul.outbound |
number | boolean 0/1 |
per-tick value | A remote hauling assignment is traveling toward or working at the remote container this tick. |
haul.returning |
number | boolean 0/1 |
per-tick value | A remote hauling assignment is returning toward the home room this tick. |
haul.suspended |
number | boolean 0/1 |
per-tick value | A remote hauling assignment is returning because operation or container validation suspended. |
haul.activity.travelTicks |
number | creep-ticks | per-tick value | Assigned remote hauler travel or return movement ticks recorded this tick. |
haul.activity.loadTicks |
number | creep-ticks | per-tick value | Assigned remote hauler successful remote-load ticks recorded this tick. |
haul.activity.deliveryTicks |
number | creep-ticks | per-tick value | Assigned remote hauler successful home-delivery ticks recorded this tick. |
haul.activity.idleTicks |
number | creep-ticks | per-tick value | Assigned remote hauler ticks waiting at home with remote energy because no delivery target was available. |
haul.creeps.active |
number | creeps | gauge | Active assigned remote haulers for this home room. |
haul.creeps.spawning |
number | creeps | gauge | Spawning haulers that may satisfy remote hauling demand for this home room. |
haul.creeps.desired |
number | creeps | gauge | Desired remote hauler count from the workload/body policy. |
haul.capacity.required |
number | energy capacity | gauge | Sum of required carry capacity across active source routes after safety margin. |
haul.capacity.assigned |
number | energy capacity | gauge | Current assigned remote hauler carry capacity. |
haul.capacity.deficit |
number | energy capacity | gauge | Remaining required carry capacity not covered by assigned remote haulers. |
haul.capacity.throughput |
number | energy/tick | gauge | Sum of estimated throughput capacity across active source workloads. |
haul.route.distance |
number | path tiles | gauge | One-way route length used by the remote logistics workload. |
haul.route.travelCost |
number | weighted ticks | gauge | One-way terrain/road-weighted travel cost used for remote hauling cycle and body sizing. |
haul.route.cycleTicks |
number | ticks | gauge | Estimated round-trip remote hauling cycle, including loading and unloading overhead. |
haul.route.confidence |
number | ratio 0..1 |
ratio | Numeric confidence in the route metric used by the workload. |
haul.route.roaded |
number | boolean 0/1 |
gauge | 1 when route state supports roaded movement assumptions. |
haul.route.fallback |
number | boolean 0/1 |
gauge | 1 when conservative fallback route metrics are in use. |
haul.production.expectedPerTick |
number | energy/tick | gauge | Sum of expected production across active remote source objectives. |
haul.body.cost |
number | energy | gauge | Cost of the selected remote logistics body. |
haul.body.carryParts |
number | body parts | gauge | Carry parts in the selected remote logistics body. |
haul.body.moveParts |
number | body parts | gauge | Move parts in the selected remote logistics body. |
haul.body.capacity |
number | energy capacity | gauge | Energy capacity of one selected remote logistics body. |
haul.replacementLeadTicks |
number | ticks | gauge | TTL threshold where assigned haulers stop counting as effective capacity. |
reservation.remainingTicks |
number | ticks | gauge | Visible remaining friendly room-controller reservation ticks from the representative active source objective, 0 when unreserved and reservable, or -1 when unavailable. |
reservation.targetTicks |
number | ticks | gauge | Configured target reservation maintained by the reservation policy. |
reservation.renewalState |
number | enum | state code | Reservation state: 0 none, 1 healthy, 2 renew, 3 spawning/assigned, 4 blocked. |
reservation.activeReservers |
number | creeps | gauge | Active assigned reserver count for the home room. |
reservation.travelTicks |
number | creep-ticks | per-tick value | Assigned remote reserver travel movement ticks recorded this tick. |
reservation.reserveTicks |
number | creep-ticks | per-tick value | Successful reserveController ticks recorded this tick. |
reservation.cpu.used |
number | CPU | per-tick gauge | CPU attributed to remote reservation management and global remote reserver execution. |
infrastructure.container.needed |
number | boolean 0/1 |
gauge | A home-owned active remote container plan exists and is not completed. |
infrastructure.container.proposed |
number | boolean 0/1 |
gauge | A remote source-container build order is pending operator approval. |
infrastructure.container.approved |
number | boolean 0/1 |
gauge | A remote source-container build order has been approved and awaits placement/revalidation. |
infrastructure.container.sitePresent |
number | boolean 0/1 |
gauge | A matching remote source-container construction site is represented by the plan. |
infrastructure.container.completed |
number | boolean 0/1 |
gauge | A matching remote source container has completed. |
infrastructure.container.blocked |
number | boolean 0/1 |
gauge | The remote source-container plan is blocked or invalidated. |
infrastructure.container.exists |
number | containers | gauge | Completed planned remote source containers known across source objectives. |
infrastructure.container.visible |
number | boolean 0/1 |
gauge | The target room is visible and the completed container object is visible at stats collection time. |
infrastructure.container.observationAge |
number | ticks | gauge | 0 for a visible completed container; otherwise ticks since the operation's last safe observation, or -1 when unknown. |
infrastructure.container.energy |
number | energy | gauge | Live energy in the completed remote source container when visible; otherwise 0. Use visible before interpreting zero as confirmed empty. |
infrastructure.container.capacity |
number | energy capacity | gauge | Live energy capacity of the completed remote source container when visible; otherwise 0. |
infrastructure.container.fillRatio |
number | ratio 0..1 |
ratio | energy / capacity, or 0 when invisible or capacity is zero. |
infrastructure.container.freeCapacity |
number | energy capacity | gauge | Live free energy capacity of the completed remote source container when visible; otherwise 0. |
cpu.used |
number | CPU | per-tick gauge | CPU attributed to remote operations using existing profiler sections and deterministic global creep execution shares. |
lifetime.energy.harvested |
number | energy | cumulative lifetime counter | Cumulative energy harvested by the active pilot memory. |
lifetime.energy.dropped |
number | energy | cumulative lifetime counter | Cumulative remote energy dropped locally or overflowed into a remote source container. |
lifetime.energy.hauled |
number | energy | cumulative lifetime counter | Cumulative energy withdrawn from the exact approved remote container by pilot haulers. |
lifetime.energy.deliveredHome |
number | energy | cumulative lifetime counter | Cumulative remote energy delivered through normal home hauler delivery. |
lifetime.haul.completedTrips |
number | trips | cumulative lifetime counter | Completed remote hauling trips where the assigned hauler finished unloading carried remote energy at home. |
External Allocation
These numeric gauges are exported under
rooms.<roomName>.externalAllocation. They project the already-computed
allocation summary and do not rerun ranking or capacity accounting during stats
collection.
| Path | Units | Meaning |
|---|---|---|
availableSpawnEnergy / allocatedSpawnEnergy |
energy | Optional spawn-investment envelope and admitted minimum requests. |
availableWorkforce / allocatedWorkforce |
creeps | External workforce slots, including shared reservation workforce when charged. |
availableHaulingCapacity / allocatedHaulingCapacity |
carry capacity | Optional external carry envelope and admitted route requirements. |
availableCpu / allocatedCpu |
policy units | Bounded relative CPU allowance and admitted cadence/execution pressure. |
availableInfrastructure / allocatedInfrastructure |
tiles | Bounded persistent infrastructure-planning pressure. |
candidateCount |
objectives | Ranked external objectives considered in the latest pass. |
admittedCount |
objectives | Objectives receiving minimum viable allocation. |
deferredCount |
objectives | Eligible or ineligible objectives not admitted. |
preemptions |
transitions | Cumulative incumbent allocations displaced by a later pass. |
No property named total is emitted. Detailed objective IDs, rank explanations,
requirements, blockers, and shared-overhead keys remain in room Memory and
debug.externalAllocation() to keep telemetry numeric and low-cardinality.
External Portfolio
Portfolio gauges are exported under rooms.<roomName>.externalPortfolio from
the latest cadence-bounded assessment and compact retained outcomes. Stats
collection does not rerun valuation.
| Path | Units | Meaning |
|---|---|---|
value.candidate |
rank points | Sum of bounded portfolio ranks considered in the latest allocation pass. |
value.admitted |
rank points | Sum of portfolio ranks currently receiving allocation. |
allocation.persistent |
objectives | Admitted persistent remote-energy objectives. |
allocation.transient |
objectives | Admitted transient highway-deposit objectives. |
yield.remoteEnergyDeliveredTick |
energy/tick | Remote energy delivered home during the current tick. |
yield.depositReturnedRetained |
resource units | Sum of the four bounded per-resource deposit-return EWMAs. |
efficiency.remote |
ratio | Mean measured/expected throughput for candidates with route evidence. |
efficiency.deposit |
ratio | Mean bounded deposit outcome-yield efficiency across retained resource summaries. |
Objective IDs, reasons, native evidence, and dimension contributions remain in
room Memory and debug.externalPortfolio(). No .total sibling metric or
high-cardinality resource/operation series is emitted.
Remote Operation Storage and Usage
Remote-operation stats are numeric projections from
Memory.rooms[roomName].remoteOperations. Detailed target room names, reasons,
source ids, ownership names, threat details, lifecycle events, and intelligence
summaries stay in ordinary Memory and debug output.
Remote hauling energy fields describe transport, not production. Remote energy
harvested by the remote harvester remains represented by remote-operation
harvest telemetry. When a hauler later withdraws that energy from the remote
container and delivers it at home, the withdrawal/delivery counters help measure
logistics throughput but do not feed rooms.<roomName>.energy.gained.*.
Useful wildcard families:
rooms.W1N1.remoteOperations.energy.*.tickcompares per-tick remote energy harvested, dropped, hauled, and delivered home.rooms.W1N1.remoteOperations.haul.creeps.*compares active, spawning, and desired hauler counts without mixing body capacity or energy values.rooms.W1N1.remoteOperations.haul.capacity.*compares required, assigned, deficit, and throughput capacity values.rooms.W1N1.remoteOperations.lifetime.energy.*groups only cumulative energy counters.
Example Grafana panels using Graphite-style queries:
| Panel | Query | Notes |
|---|---|---|
| Remote energy flow | rooms.W1N1.remoteOperations.energy.*.tick |
Line or bar panel for current-tick harvested, dropped, hauled, and delivered-home energy. Keep this separate from lifetime counters. |
| Remote haul capacity | rooms.W1N1.remoteOperations.haul.capacity.* |
Shows required, assigned, deficit, and throughput capacity. Alert when deficit stays above 0. |
| Remote hauler staffing | rooms.W1N1.remoteOperations.haul.creeps.* |
Compares active, spawning, and desired haulers without mixing in carry capacity or energy. |
| Remote route quality | rooms.W1N1.remoteOperations.haul.route.{distance,cycleTicks,confidence,roaded,fallback} |
Good single-stat or state-timeline inputs for spotting fallback route metrics or unroaded assumptions. |
| Remote operation state | rooms.W1N1.remoteOperations.operation.{active,suspended,state,threat,intelligenceAge} |
State and safety overview. Use value mappings for state and threat. |
| Remote reservation health | rooms.W1N1.remoteOperations.reservation.{remainingTicks,targetTicks,activeReservers,renewalState} |
Tracks whether reservation coverage is healthy and whether a reserver is active. |
| Remote container health | rooms.W1N1.remoteOperations.infrastructure.container.{visible,energy,capacity,fillRatio,observationAge} |
Use visible before interpreting zero energy as confirmed empty. |
| Remote lifetime contribution | rooms.W1N1.remoteOperations.lifetime.energy.* |
Counter-only panel for cumulative harvested, dropped, hauled, and delivered-home energy. Use rate/derivative transforms downstream if desired. |
Migration notes for removed paths:
| Removed path | Replacement |
|---|---|
eligible |
candidate.eligible |
blocked |
candidate.blocked |
evaluating |
candidate.evaluating |
inactive |
candidate.inactive |
bestScore |
candidate.best.score |
bestSourceCount |
candidate.best.sources |
homeReady |
candidate.best.homeReady |
lastEvaluatedAt |
candidate.lastEvaluatedAt |
activeOperations |
operation.active |
suspendedOperations |
operation.suspended |
harvesters |
creeps.harvesters |
travelTicks |
harvest.travelTicks |
harvestTicks |
harvest.activeTicks |
retreatTicks |
harvest.retreatTicks |
energyHarvestedTick |
energy.harvested.tick |
energyHarvestedTotal |
lifetime.energy.harvested |
energyDroppedTick |
energy.dropped.tick |
energyDroppedTotal |
lifetime.energy.dropped |
haulingAuthorized |
haul.authorized |
haulingAssigned |
haul.assigned and haul.creeps.active |
haulingOutbound |
haul.outbound |
haulingReturning |
haul.returning |
haulingSuspended |
haul.suspended |
haulingContainerEnergy |
infrastructure.container.energy |
haulingEnergyWithdrawnTick |
energy.hauled.tick |
haulingEnergyWithdrawnTotal |
lifetime.energy.hauled |
haulingEnergyDeliveredTick |
energy.deliveredHome.tick |
haulingEnergyDeliveredTotal |
lifetime.energy.deliveredHome |
haulingCompletedTripsTotal |
lifetime.haul.completedTrips |
haulingRouteDistance |
haul.route.distance |
haulingRouteTravelCost |
haul.route.travelCost |
haulingCycleTicks |
haul.route.cycleTicks |
haulingExpectedProductionPerTick |
haul.production.expectedPerTick |
haulingRequiredCarryCapacity |
haul.capacity.required |
haulingDesiredHaulerCount |
haul.creeps.desired |
haulingActiveHaulerCount |
haul.creeps.active |
haulingSpawningHaulerCount |
haul.creeps.spawning |
haulingAssignedCarryCapacity |
haul.capacity.assigned |
haulingCapacityDeficit |
haul.capacity.deficit |
haulingBodyCost |
haul.body.cost |
haulingBodyCarryParts |
haul.body.carryParts |
haulingBodyMoveParts |
haul.body.moveParts |
haulingBodyCapacity |
haul.body.capacity |
haulingThroughputCapacity |
haul.capacity.throughput |
haulingReplacementLeadTicks |
haul.replacementLeadTicks |
haulingRouteConfidence |
haul.route.confidence |
haulingRoaded |
haul.route.roaded |
haulingFallback |
haul.route.fallback |
threatCode |
operation.threat |
intelligenceAge |
operation.intelligenceAge |
operationStateCode |
operation.state |
remoteContainerNeeded |
infrastructure.container.needed |
remoteContainerProposed |
infrastructure.container.proposed |
remoteContainerApproved |
infrastructure.container.approved |
remoteContainerSitePresent |
infrastructure.container.sitePresent |
remoteContainerCompleted |
infrastructure.container.completed |
remoteContainerBlocked |
infrastructure.container.blocked |
reservationRemainingTicks |
reservation.remainingTicks |
reservationTargetTicks |
reservation.targetTicks |
reservationRenewalState |
reservation.renewalState |
reservationActiveReservers |
reservation.activeReservers |
reservationCpuUsed |
reservation.cpu.used |
economy.remote.active |
remoteOperations.operation.active |
economy.remote.state |
remoteOperations.operation.state |
economy.remote.suspended |
remoteOperations.operation.suspended |
economy.remote.threat |
remoteOperations.operation.threat |
economy.remote.intelligenceAge |
remoteOperations.operation.intelligenceAge |
economy.remote.creeps.* |
remoteOperations.creeps.* and remoteOperations.haul.creeps.active |
economy.remote.energy.*.tick |
remoteOperations.energy.*.tick |
economy.remote.energy.inTransit |
remoteOperations.energy.inTransit |
economy.remote.energy.netDeliveredTotal |
remoteOperations.lifetime.energy.deliveredHome |
economy.remote.energy.deliveryRatio |
remoteOperations.energy.delivery.ratio |
economy.remote.harvest.* |
remoteOperations.harvest.* |
economy.remote.container.* |
remoteOperations.infrastructure.container.* |
economy.remote.haul.* |
remoteOperations.haul.* |
economy.remote.reservation.* |
remoteOperations.reservation.* |
economy.remote.cpu.used |
remoteOperations.cpu.used |
Terminal
These values are exported under rooms.<roomName>.terminal.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
exists |
number | boolean 0/1 |
gauge | Whether a completed owned terminal is visible in the room. |
energy |
number | energy | gauge | Energy currently stored in the terminal. |
energyCapacity |
number | energy capacity | gauge | Terminal energy capacity. |
energyFreeCapacity |
number | energy capacity | gauge | Remaining terminal energy capacity. |
usedCapacity |
number | resources | gauge | Total terminal store used across all resources. |
freeCapacity |
number | resources | gauge | Total free terminal store capacity. |
capacity |
number | resources | gauge | Total terminal store capacity. |
fillRatio |
number | ratio 0-1 | gauge | usedCapacity / capacity, or 0 when capacity is zero. |
energyState |
number | enum | gauge | 0=none, 1=empty, 2=low, 3=charging, 4=balanced, 5=surplus. |
targetEnergy |
number | energy | gauge | Configured terminal energy target. |
energyDelta |
number | energy | gauge | Current terminal energy minus target energy. |
canSend |
number | boolean 0/1 |
gauge | Whether terminal energy meets the minimum send-readiness threshold. |
canReceive |
number | boolean 0/1 |
gauge | Whether the terminal has energy free capacity. |
resourceTypes |
number | resources | gauge | Count of resource types currently stored in the terminal. |
transactionCost.pairedRoomCount |
number | rooms | gauge | Visible owned rooms with terminals sampled for transaction cost. |
transactionCost.minEnergyPer1000 |
number | energy | gauge | Cheapest sampled energy cost for sending 1,000 resources. |
transactionCost.maxEnergyPer1000 |
number | energy | gauge | Most expensive sampled energy cost for sending 1,000 resources. |
transactionCost.averageEnergyPer1000 |
number | energy | gauge | Average sampled energy cost for sending 1,000 resources. |
transactionCost.nearestRoomEnergyPer1000 |
number | energy | gauge | Cheapest sampled paired-room cost, or 0 when none exist. |
Detailed terminal resource names and recommendations are kept in room memory
and debug output rather than Memory.stats to preserve the numeric telemetry
contract.
Spawns
These values are exported under rooms.<roomName>.spawns.<spawnName>.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
energy |
number | energy | gauge | Energy currently stored in the spawn. |
capacity |
number | energy capacity | gauge | Spawn energy capacity. |
spawningRole |
string | role or empty string | label-like value | Role of the creep currently spawning, or "" when idle. |
spawningRole is the one current non-numeric leaf in Memory.stats. Avoid
adding more string leaves unless a downstream contract deliberately requires
them.
Observed-Room Intelligence Projection
These values are exported under observedRooms.<roomName> from persistent room
intelligence when it has a valid updatedAt tick.
| Path | Type | Units or mapping | Treatment | Meaning |
|---|---|---|---|---|
controller.level |
number | RCL | gauge | Last observed controller level, or 0 when unavailable. |
ownership.isMine |
number | boolean | gauge | 1 when the controller is known to be mine. |
ownership.hasOwner |
number | boolean | gauge | 1 when an owner is known or the controller is mine. |
reservation.isMine |
number | boolean | gauge | 1 when the controller reservation is known to be mine. |
sources.count |
number | sources | gauge | Known source count, falling back to the source array length. |
hostiles.count |
number | hostile creeps | gauge | Last known hostile creep count. |
hostiles.staleCount |
number | hostile creeps | gauge | Retained hostile creep records not present in the latest observation. |
hostiles.structureCount |
number | hostile structures | gauge | Hostile structure records present in the latest observation. |
confidence.observationCount |
number | observations | counter-like gauge | CIA dossier observation count. |
confidence.score |
number | 0..1 |
gauge | CIA freshness confidence score. |
assessment.overallScore |
number | 0..100 |
gauge | Advisory CIA strategic score after threat penalty. |
assessment.confidence |
number | 0..1 |
gauge | Advisory assessment confidence from CIA dossier freshness. |
assessment.economy |
number | 0..100 |
gauge | Economic usefulness score. |
assessment.threat |
number | 0..100 |
gauge | Danger score; higher means more dangerous. |
assessment.logistics |
number | 0..100 |
gauge | Coarse support and reachability score. |
assessment.expansion |
number | 0..100 |
gauge | Future owned-colony suitability score. |
assessment.remoteHarvest |
number | 0..100 |
gauge | Remote energy harvesting suitability score. |
assessment.militaryValue |
number | 0..100 |
gauge | Strategic military significance score. |
assessment.recommendation |
number | enum | gauge | Numeric CIA recommendation mapping. |
assessment.freshness |
number | enum | gauge | Numeric CIA intelligence freshness mapping. |
lastObserved |
number | game tick | gauge | Intelligence updatedAt tick. |
lastObservedAge |
number | ticks | gauge | Math.max(0, Game.time - lastObserved). |
The observed-room projection intentionally excludes usernames, ids, room status strings, positions, exits, arrays, detailed hostile records, ownership history, resource survey details, and scout reasons.
Numeric Mappings
Boolean encoding:
0 = false1 = true
CIA strategic recommendations:
0 = owned1 = observe2 = refresh-intelligence3 = strategic-watch4 = avoid5 = remote-harvest-candidate6 = expansion-candidate7 = military-interest8 = low-value
CIA intelligence freshness:
0 = fresh1 = recent2 = stale3 = obsolete
Economy status:
0 = starved1 = strained2 = stable3 = surplus
Economy mode:
0 = normal1 = emergency
Strategic surplus state and strategicSurplusGrade:
0 = inactive1 = building2 = sustained3 = overflow
Link routeMode:
0 = none1 = source-to-storage2 = storage-to-controller3 = source-to-controller
Room intelligence energy state remains internal Memory today, but when discussed in debug output it uses:
0 = normal container storage1 = starved container storage
Counter And Gauge Behavior
Counter-derived or signed values:
rooms.<roomName>.economy.energyTrendandeconomy.trendare signed gauges.rooms.<roomName>.energy.net.tickis a signed per-tick gauge.
Do not treat signed gauges or derived net values as monotonic counters.
Per-tick gauges:
cpu.usedcpu.profile.sections.*cpu.profile.rooms.<roomName>.*rooms.<roomName>.energy.gained.tickrooms.<roomName>.energy.harvest.capacity.tickrooms.<roomName>.energy.used.tickrooms.<roomName>.energy.net.tickrooms.<roomName>.harvesters.movingrooms.<roomName>.harvesters.idlerooms.<roomName>.harvesters.repairingrooms.<roomName>.harvesters.successfulHarvestsrooms.<roomName>.harvesters.harvestAttemptsrooms.<roomName>.harvesters.failedHarvestsrooms.<roomName>.harvesters.energyHarvestedrooms.<roomName>.harvesters.expectedHarvestEnergyrooms.<roomName>.harvesters.missedHarvestEnergyrooms.<roomName>.harvesters.unresolvedSourcerooms.<roomName>.harvesters.notOnContainerrooms.<roomName>.harvesters.noSourceContainerrooms.<roomName>.harvesters.sourceEmptyrooms.<roomName>.harvesters.capacityBlockedrooms.<roomName>.harvesters.results.*rooms.<roomName>.maintenance.energySpent.tickrooms.<roomName>.sources.<sourceId>.harvest.tickrooms.<roomName>.sources.<sourceId>.harvest.attemptsrooms.<roomName>.sources.<sourceId>.harvest.successfulrooms.<roomName>.sources.<sourceId>.harvest.failedrooms.<roomName>.sources.<sourceId>.harvest.expectedrooms.<roomName>.sources.<sourceId>.harvest.missed
cpu.used is the latest practical cumulative user-code CPU reading for the
tick. It is updated from the outer loop wrapper after normal loop execution
and, when enabled, after screeps-profiler wrapper bookkeeping. It is not a
sum of the profile sections and may exceed their combined value because some
work is unattributed or occurs outside their measurement boundaries.
Current-state gauges include CPU bucket/limit, GCL, room energy, controller,
container, storage, spawn, economy assessment, reserve policy, strategic
surplus, maintenance backlog, harvester active population, harvester average
active WORK parts, source assignment, source energy, source regeneration,
source-container state, observed-room, and server tick-duration metrics. Server
tick-duration metrics are gauges.
Grafana Examples
The downstream exporter is expected to flatten Memory.stats.rooms.<room>...
under the configured screeps.rooms.<room>... namespace. Example Graphite
queries using a Grafana $room variable:
movingAverage(screeps.rooms.$room.energy.gained.tick,"1hour")
movingAverage(screeps.rooms.$room.energy.harvest.capacity.tick,"1hour")
diffSeries(
movingAverage(screeps.rooms.$room.energy.harvest.capacity.tick,"1hour"),
movingAverage(screeps.rooms.$room.energy.gained.tick,"1hour")
)
scale(
divideSeries(
movingAverage(screeps.rooms.$room.energy.gained.tick,"1hour"),
movingAverage(screeps.rooms.$room.energy.harvest.capacity.tick,"1hour")
),
100
)
screeps.rooms.$room.sources.*.harvest.tick
These examples document intended query shapes; they have not been tested against Grafana in this repository.
This repository documents metric meaning only. It does not prescribe downstream exporter implementation changes.
Intentionally Unexported Data
Representative internal Memory values that are not part of the current
Memory.stats contract include:
- usernames in controller ownership, reservations, hostile sightings, or hostile structure sightings
- source, structure, target, and hostile structure IDs
- source ids except the deliberate
rooms.<roomName>.sources.<sourceId>.harvest.tickharvest telemetry path - room positions
- room exit arrays
- hostile structure arrays and structure details
- free-form reasons for economy, emergency, strategic surplus, scout targeting, maintenance, and intents
- creep intents and workflow action details
- detailed manager state, cooldown objects, and internal summary caches
Memory.rooms.<roomName>.stats.creeps.total- room economy and maintenance cumulative counters retained outside
Memory.stats Memory.rooms.<roomName>.maintenanceSummary.topJobReason
These values remain available through console/debug inspection unless a
deliberate numeric projection is later added to Memory.stats.
Defensive Readiness
Each owned room exports low-cardinality gauges under
Memory.stats.rooms.<roomName>.defense:
posture:0=peace,1=alert,2=engaged,3=criticalactionableHostiles: current hostile creeps with combat, heal, dismantle, or claim capabilityhostilePressure: weighted active destructive capability gaugedefendersDesired: current policy demanddefendersActive: live non-spawning defenderstowerEnergyReadiness: combined tower energy divided by combined capacitycriticalRampartMinimumHits: minimum hits among existing critical rampartssafeModeRecommended:0or1
Target ids, usernames, posture reasons, safe-mode reasons, and retry state are
not exported. They remain available through debug.defense().
Adding Or Changing Telemetry
- Confirm the metric belongs in this repository's
Memory.statstelemetry contract. - Add or modify the relevant
src/stats/collector. - Use a stable, numeric, low-cardinality path.
- Decide whether it is a gauge, per-tick value, signed gauge, or cumulative counter.
- Confirm no recursive key beneath
Memory.statsis namedtotal. - Document units and enum mappings.
- Update this file in the same change.
- Preserve compatibility where downstream dashboards may already depend on an existing path.
- Run the normal project verification.