Skip to content

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 0 or 1.
  • 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 total anywhere under Memory.stats. Wildcard queries such as stats.gauges.<namespace>.* should return sibling series with comparable scale. A .total aggregate 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> is harvester, hauler, scout, upgrader, builder, colonizer, mineralMiner, depositHarvester, remoteHarvester, or remoteReserver.
  • <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.

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.*.tick compares 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 = false
  • 1 = true

CIA strategic recommendations:

  • 0 = owned
  • 1 = observe
  • 2 = refresh-intelligence
  • 3 = strategic-watch
  • 4 = avoid
  • 5 = remote-harvest-candidate
  • 6 = expansion-candidate
  • 7 = military-interest
  • 8 = low-value

CIA intelligence freshness:

  • 0 = fresh
  • 1 = recent
  • 2 = stale
  • 3 = obsolete

Economy status:

  • 0 = starved
  • 1 = strained
  • 2 = stable
  • 3 = surplus

Economy mode:

  • 0 = normal
  • 1 = emergency

Strategic surplus state and strategicSurplusGrade:

  • 0 = inactive
  • 1 = building
  • 2 = sustained
  • 3 = overflow

Link routeMode:

  • 0 = none
  • 1 = source-to-storage
  • 2 = storage-to-controller
  • 3 = source-to-controller

Room intelligence energy state remains internal Memory today, but when discussed in debug output it uses:

  • 0 = normal container storage
  • 1 = starved container storage

Counter And Gauge Behavior

Counter-derived or signed values:

  • rooms.<roomName>.economy.energyTrend and economy.trend are signed gauges.
  • rooms.<roomName>.energy.net.tick is a signed per-tick gauge.

Do not treat signed gauges or derived net values as monotonic counters.

Per-tick gauges:

  • cpu.used
  • cpu.profile.sections.*
  • cpu.profile.rooms.<roomName>.*
  • rooms.<roomName>.energy.gained.tick
  • rooms.<roomName>.energy.harvest.capacity.tick
  • rooms.<roomName>.energy.used.tick
  • rooms.<roomName>.energy.net.tick
  • rooms.<roomName>.harvesters.moving
  • rooms.<roomName>.harvesters.idle
  • rooms.<roomName>.harvesters.repairing
  • rooms.<roomName>.harvesters.successfulHarvests
  • rooms.<roomName>.harvesters.harvestAttempts
  • rooms.<roomName>.harvesters.failedHarvests
  • rooms.<roomName>.harvesters.energyHarvested
  • rooms.<roomName>.harvesters.expectedHarvestEnergy
  • rooms.<roomName>.harvesters.missedHarvestEnergy
  • rooms.<roomName>.harvesters.unresolvedSource
  • rooms.<roomName>.harvesters.notOnContainer
  • rooms.<roomName>.harvesters.noSourceContainer
  • rooms.<roomName>.harvesters.sourceEmpty
  • rooms.<roomName>.harvesters.capacityBlocked
  • rooms.<roomName>.harvesters.results.*
  • rooms.<roomName>.maintenance.energySpent.tick
  • rooms.<roomName>.sources.<sourceId>.harvest.tick
  • rooms.<roomName>.sources.<sourceId>.harvest.attempts
  • rooms.<roomName>.sources.<sourceId>.harvest.successful
  • rooms.<roomName>.sources.<sourceId>.harvest.failed
  • rooms.<roomName>.sources.<sourceId>.harvest.expected
  • rooms.<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.tick harvest 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=critical
  • actionableHostiles: current hostile creeps with combat, heal, dismantle, or claim capability
  • hostilePressure: weighted active destructive capability gauge
  • defendersDesired: current policy demand
  • defendersActive: live non-spawning defenders
  • towerEnergyReadiness: combined tower energy divided by combined capacity
  • criticalRampartMinimumHits: minimum hits among existing critical ramparts
  • safeModeRecommended: 0 or 1

Target ids, usernames, posture reasons, safe-mode reasons, and retry state are not exported. They remain available through debug.defense().

Adding Or Changing Telemetry

  1. Confirm the metric belongs in this repository's Memory.stats telemetry contract.
  2. Add or modify the relevant src/stats/ collector.
  3. Use a stable, numeric, low-cardinality path.
  4. Decide whether it is a gauge, per-tick value, signed gauge, or cumulative counter.
  5. Confirm no recursive key beneath Memory.stats is named total.
  6. Document units and enum mappings.
  7. Update this file in the same change.
  8. Preserve compatibility where downstream dashboards may already depend on an existing path.
  9. Run the normal project verification.