Add tiered LOTL mining onion and fleet recon so agents can fallback across execution tiers while operators see spread and vuln posture in Crucible. Includes triple-onion chain, spread cred graph, and full Go/TS/E2E test validation.

This commit is contained in:
AetherForge
2026-06-06 23:53:21 -07:00
parent 6372b07e6c
commit 3938bcd1c5
268 changed files with 21347 additions and 1130 deletions

View File

@@ -33,6 +33,89 @@ describe('agentStatsUnchanged', () => {
}),
).toBe(false);
});
it('returns false when mining cascade fields change', () => {
const agent = mockAgent({
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
active_method: 'inprocess',
stratum_overlay: false,
});
expect(
agentStatsUnchanged(agent, {
agent_id: agent.id,
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
active_method: 'container',
}),
).toBe(false);
expect(
agentStatsUnchanged(agent, {
agent_id: agent.id,
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
active_method: 'inprocess',
stratum_overlay: true,
}),
).toBe(false);
});
it('returns false when mining_hashrate or lotl_tier change', () => {
const agent = mockAgent({
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
mining_hashrate: 500,
lotl_tier: 'tier-1',
});
expect(
agentStatsUnchanged(agent, {
agent_id: agent.id,
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
mining_hashrate: 600,
}),
).toBe(false);
expect(
agentStatsUnchanged(agent, {
agent_id: agent.id,
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
lotl_tier: 'tier-2',
}),
).toBe(false);
});
it('returns false when lotl_attempts change', () => {
const agent = mockAgent({
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
lotl_attempts: [{ tier: 'container', ok: false, duration_ms: 500 }],
});
expect(
agentStatsUnchanged(agent, {
agent_id: agent.id,
hashrate_15s: 100,
hashrate_1m: 90,
hashrate_15m: 80,
cpu_usage_pct: 12,
lotl_attempts: [{ tier: 'container', ok: true, duration_ms: 500 }],
}),
).toBe(false);
});
});
describe('WS_LATEST_MESSAGE_TYPES', () => {