Skip to main content

Estados Operacionais da Rede

O Weave Network opera sempre em estados bem definidos, derivados automaticamente das condições da rede através de uma máquina de estados determinística.

Esses estados não são configuráveis manualmente. Eles resultam do equilíbrio entre energia disponível, buffer energético, integridade estrutural e lógica ativa.

O objetivo desse modelo é garantir previsibilidade, segurança e degradação controlada.


Visão Geral dos Estados​

EstadoSchedulerThroughputEnergia ConsumidaDescrição
OFFLINE❌ Bloqueado0%NenhumaController desligado
BOOTING❌ Bloqueado0%Standby apenasInicialização após ativação
ONLINE✅ Ativo60-100%Total (standby + transfers)Operação normal
RECONFIGURING❌ Bloqueado0%Standby apenasTopologia mudou, aguardando estabilização
BROWNOUT⚠️ Degradado0-60%Standby apenasEnergia baixa, operação crítica
COLLAPSE❌ Bloqueado0%NenhumaBuffer zerado, Trama dissipada
REBOOT❌ Bloqueado0%Standby apenasRecondensação após colapso

Diagrama de Transições​

        ┌─────────────┐
│ OFFLINE │◄──── Controller desligado
└──────┬──────┘
│ Ativar Controller
▼
┌─────────────┐
│ BOOTING │◄──── Aguardando bind de posição/dimensão
└──────┬──────┘
│ Posição vinculada
▼
┌─────────────┐
┌──►│ ONLINE │◄──── Energia >= onlineThreshold (default 80%)
│ └──────┬──────┘ Topologia estável
│ │
│ │ Energia < brownoutThreshold (50%)
│ ▼
│ ┌─────────────┐
│ │ BROWNOUT │◄──── Energia sustenta apenas contenção
│ └──────┬──────┘ Throughput degrada 0-60%
│ │
│ │ Energia = 0
│ ▼
│ ┌─────────────┐
│ │ COLLAPSE │◄──── Buffer zerado, Trama dissipada
│ └──────┬──────┘
│ │ Energia restaurada
│ ▼
│ ┌─────────────┐
│ │ REBOOT │◄──── Delay fixo de estabilização
│ └──────┬──────┘
│ │ Cooldown completo
│ ▼
└──────────┘
│
│ Topologia muda (Fiber quebra, etc)
▼
┌─────────────┐
│RECONFIGURING│◄──── Delay fixo de segurança (20 ticks)
└──────┬──────┘
│ Cooldown completo
└─────► ONLINE (se energia suficiente)
└──► BROWNOUT (se energia baixa)

Estados Detalhados​

1. OFFLINE​

Condição: Controller desligado (active = false) ou sem level vinculado.

Comportamento:

  • ❌ Nenhuma contenção de Trama
  • ❌ Nenhuma lógica ativa
  • ❌ Nenhuma transferência
  • ❌ Nenhum consumo de energia
  • ❌ Scheduler bloqueado

Transição de saída: OFFLINE → BOOTING quando Controller é ativado.

Uso: Estado padrão quando Controller é colocado no mundo ou desligado intencionalmente.


2. BOOTING​

Condição: Controller ativado mas ainda sem posição/dimensão vinculada no Runtime.

Comportamento:

  • ⚙️ Trama está sendo recondensada
  • ❌ Scheduler bloqueado (sem transferências)
  • ⚡ Consumo: standby apenas
  • 🔄 Aguarda primeiro tick de binding

Transição de saída: BOOTING → ONLINE (se energia suficiente) BOOTING → BROWNOUT (se energia < brownoutThreshold) BOOTING → COLLAPSE (se energia = 0)

Duração típica: 1-2 ticks (bind automático no primeiro serverTick)


3. ONLINE​

Condição:

  • Controller ativo
  • Energia >= onlineThreshold (default 80% do buffer)
  • Topologia estável (reconfigCooldown = 0)
  • Não está em reboot (rebootCooldown = 0)

Comportamento:

  • ✅ Scheduler ATIVO
  • ✅ Transferências normais
  • ✅ Regras de Port executadas
  • ⚡ Consumo: standby + custo por transferência
  • 📊 Throughput: 60-100% (baseado em capacityActiveRatio)

Degradação de Throughput (zona ONLINE):

Energia (% buffer)Throughput EfetivoObservação
80-100%100%Operação ideal
70%87.5%Leve degradação
60%75%Degradação moderada
50%60%Limiar BROWNOUT

Fórmula:

Se ratio >= 0.8: throughput = 100%
Se 0.5 <= ratio < 0.8: throughput = 60% + ((ratio - 0.5) / 0.3) * 40%

Transição de saída: ONLINE → BROWNOUT se energia cai abaixo de 50% ONLINE → RECONFIGURING se topologia muda ONLINE → COLLAPSE se energia = 0


4. RECONFIGURING​

Condição: reconfigCooldown > 0 (topologia mudou recentemente)

Causas de Reconfiguração:

  • 🔨 Fiber quebrada
  • 📦 Bloco colocado/removido na rede
  • 🔌 Port registrada/desregistrada
  • 🏗️ Alteração estrutural detectada

Comportamento:

  • ❌ Scheduler BLOQUEADO por segurança
  • ❌ Nenhuma transferência
  • ⚡ Consumo: standby apenas
  • 🔄 Graph está sendo recalculado
  • ⏱️ Cooldown fixo: 20 ticks (1 segundo)

Motivação do Bloqueio: Prevenir transferências inconsistentes durante mudanças topológicas. Exemplo: Porta de origem pode desaparecer mid-transfer.

Transição de saída: Após cooldown completo:

  • RECONFIGURING → ONLINE (se energia >= onlineThreshold)
  • RECONFIGURING → BROWNOUT (se energia < onlineThreshold)
  • RECONFIGURING → COLLAPSE (se energia = 0)

5. BROWNOUT​

Condição:

  • Energia < brownoutThreshold (default 50%)
  • Energia > 0 (caso contrário seria COLLAPSE)

Comportamento:

  • ⚠️ Scheduler DEGRADADO (ativo mas com penalidade severa)
  • ⚠️ Throughput reduzido progressivamente
  • ❌ Regras de Port desativadas
  • ⚡ Consumo: standby apenas (sem custo de transferência)
  • 💾 Estado interno preservado

Degradação de Throughput (zona BROWNOUT):

Energia (% buffer)Throughput EfetivoObservação
50%60%Transição ONLINE→BROWNOUT
40%48%Degradação severa
30%36%Operação crítica
20%24%Quase colapso
10%12%Transferências mínimas
5%6%À beira do colapso
0%0%→ COLLAPSE

Fórmula:

throughput = (ratio / 0.5) * 60%

Hysteresis (Prevenção de Oscilação): Quando recuperando de BROWNOUT, a rede não volta para ONLINE até energia atingir onlineThreshold (80%).

Isso previne "flapping" quando energia oscila entre 48-52%.

Exemplo:

1. Energia cai para 48% → BROWNOUT
2. Energia sobe para 55% → permanece BROWNOUT (hysteresis)
3. Energia sobe para 82% → retorna para ONLINE

Transição de saída: BROWNOUT → ONLINE quando energia >= onlineThreshold (80%) BROWNOUT → COLLAPSE quando energia = 0 BROWNOUT → RECONFIGURING se topologia muda


6. COLLAPSE​

Condição: energyRatio <= 0.0 (buffer completamente vazio)

Comportamento:

  • ❌ Scheduler BLOQUEADO
  • ❌ Trama dissipada completamente
  • ❌ Nenhuma operação lógica
  • ⚡ Consumo: 0 FE/t
  • 💾 Payloads em trânsito preservados (não há perda de itens/fluidos)

Recuperação: Quando energia externa é aplicada (Flux Networks, gerador adjacente, etc):

  • COLLAPSE → REBOOT (com delay de estabilização)

Duração: Indefinida até energia ser restaurada externamente.

Observação Importante: COLLAPSE não deleta itens ou fluidos. A rede apenas para de processar transfers. Storages adjacentes às Ports mantém seus conteúdos intactos.


7. REBOOT​

Condição: rebootCooldown > 0 (energia restaurada após COLLAPSE)

Comportamento:

  • ⚙️ Trama sendo recondensada
  • ❌ Scheduler BLOQUEADO
  • ⚡ Consumo: standby apenas
  • ⏱️ Cooldown fixo: configurável (default 40 ticks = 2 segundos)

Motivação do Delay: Simula tempo de estabilização da Trama após colapso total. Previne startup instantâneo (realismo lore).

Transição de saída: Após cooldown completo:

  • REBOOT → ONLINE (se energia >= onlineThreshold)
  • REBOOT → BROWNOUT (se energia < onlineThreshold)
  • REBOOT → COLLAPSE (se energia = 0 novamente)

Máquina de Estados (Ordem de Avaliação)​

A derivação de estado segue ordem fixa e determinística:

1. !active? → OFFLINE
2. !hasBoundPosition? → BOOTING
3. reconfigCooldown > 0? → RECONFIGURING
4. energyRatio <= 0? → COLLAPSE
5. rebootCooldown > 0? → REBOOT
6. energyRatio < brownoutThreshold? → BROWNOUT
7. energyRatio < onlineThreshold && wasRecovering? → BROWNOUT (hysteresis)
8. Caso contrário → ONLINE

Implementação: WeaveStateMachine.derive(StateInput, previousState)


Scheduler: Quando Executa?​

O scheduler só executa nos estados que permitem:

EstadoScheduler Executa?Throughput
OFFLINE❌ Não0%
BOOTING❌ Não0%
ONLINE✅ Sim60-100%
RECONFIGURING❌ Não0%
BROWNOUT⚠️ Sim (degradado)0-60%
COLLAPSE❌ Não0%
REBOOT❌ Não0%

Código:

if (state == ONLINE || state == BROWNOUT) {
// Scheduler runs with progressive throughput degradation
double degradation = computeThroughputDegradation(energyRatio, state);
int effectiveChannels = (int)(channels * degradation);
WeaveScheduler.tick(graph, effectiveChannels, ...);
}

Energia e Contenção​

Buffer de Energia​

Todo Controller possui:

  • energyStored: FE atual no buffer
  • maxEnergy: capacidade baseada em tier (via WeaveTierStats)

Cálculo de Ratio:

energyRatio = energyStored / (double) maxEnergy

Consumo de Energia​

Standby (toda rede):

standbyFe/t = baseFe + (portCount * portCostFe)

Por Transfer (apenas ONLINE/BROWNOUT):

transferCostFe = configurável por payload type

Thresholds Padrão​

  • brownoutThreshold = 0.5 (50% do buffer)
  • onlineThreshold = 0.8 (80% do buffer)

Configuráveis via WeaveTierStats datapack.


Exemplos de Cenários​

Cenário 1: Startup Normal​

1. Controller colocado no mundo → OFFLINE
2. Player ativa Controller → BOOTING (1 tick)
3. Runtime bind completo → ONLINE (energia inicial 100%)
4. Rede opera normalmente

Cenário 2: Quebra de Fiber​

1. Rede em ONLINE, operando normalmente
2. Player quebra Fiber → RECONFIGURING
3. Runtime detecta topologia mudou, ativa cooldown (20 ticks)
4. Após 1 segundo → ONLINE (se energia suficiente)

Cenário 3: Energia Esgotando​

1. Rede em ONLINE (energia 90%)
2. Consumo contínuo sem reposição
3. Energia cai para 48% → BROWNOUT (throughput degrada para 57.6%)
4. Energia cai para 30% → BROWNOUT (throughput degrada para 36%)
5. Energia cai para 0% → COLLAPSE (scheduler para)

Cenário 4: Recuperação de Collapse​

1. Rede em COLLAPSE (buffer = 0 FE)
2. Player conecta Flux Point que injeta 5000 FE
3. Energia restaurada (ratio > 0) → REBOOT (cooldown 40 ticks)
4. Após 2 segundos → ONLINE (se energia >= 80%)
→ BROWNOUT (se energia < 80%)

Cenário 5: Hysteresis (Oscilação Prevenida)​

1. Energia = 60% → ONLINE (throughput 75%)
2. Transfer grande consome energia → 45% → BROWNOUT
3. Flux Point injeta energia → 55% → permanece BROWNOUT (hysteresis!)
4. Mais energia injetada → 82% → retorna para ONLINE

Monitoramento de Estado​

Debug Wrench​

Shift+Click no Controller:

[WN] Controller dump
state=ONLINE
blockReason=ok
reconfigCooldownTicks=0
rebootCooldownTicks=0
energyStored=4500
maxEnergy=5000
tier=1

Estados Problemáticos​

RECONFIGURING prolongado: → Verifique se não há mudanças contínuas na topologia → Exemplo: Piston empurrando Fiber repetidamente

BROWNOUT constante: → Energia insuficiente para demanda → Soluções: adicionar mais geração, reduzir transfers, upgrade tier

COLLAPSE recorrente: → Consumo > geração → Soluções: buffer maior (tier upgrade), mais geração, reduzir carga


Regras de Design​

Invariantes​

  1. Determinismo: Mesmo input → mesmo estado (sempre)
  2. Sem Manual Override: Estados não são configuráveis pelo player
  3. Safety First: Mudanças topológicas sempre param scheduler
  4. Graceful Degradation: BROWNOUT permite operação crítica
  5. No Data Loss: COLLAPSE não deleta payloads

Filosofia​

"A rede deve falhar visivelmente e previsível, nunca silenciosamente."

Estados operacionais fornecem feedback claro ao player:

  • Energia baixa → throughput cai gradualmente
  • Buffer zerado → rede para completamente
  • Topologia muda → pause temporário para segurança

Configuração Avançada​

Via WeaveTierStats (Datapack)​

{
"tier": 1,
"brownoutThreshold": 0.5,
"onlineThreshold": 0.8,
"rebootDelayTicks": 40,
"reconfigDelayTicks": 20
}

Via Server Config (Dev Only)​

[weave_network.tuning]
devCapacityActiveRatio = -1.0 # -1 = disabled, 0.0-1.0 = override ratio

Referências de Código​

  • Estado: WeaveOperationalState.java (core/weave)
  • Máquina de Estados: WeaveStateMachine.java (core/weave)
  • Runtime: WeaveRuntime.java (impl/minecraft/neoforge/runtime)
  • Degradação: WeaveRuntime.computeThroughputDegradation()

Veja Também​