Files
AetherForge/PROBLEMS.md
AetherForge 821a0e2cd7
Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Close test-gap noise rows and sync coverage documentation.
Restore P1/P2/fleet/erasure COVERED rows in PROBLEMS.md with refreshed counts; drop fixed poll-duplication and Vitest-noise items. Silence ECONNREFUSED stderr in Vitest setup, alias download mock exports, and expand erasure/Path Tracer test coverage.
2026-06-07 06:44:54 -07:00

9.3 KiB
Raw Blame History

PROBLEMS.md

Open issues only. Fixed items removed. Last sweep: 2026-06-07.

No open code issues

Automatable gaps are closed; remaining items below are by-design limits, architecture deferrals, manual/live P2, or test noise. Regression tables and counts live in tests/README.md.

By design / safety

Issue Notes
bof_execute disabled Agent returns explicit error; in-memory BOF execution disabled (client.go).
Process hollowing AMSI/ETW Relocation done; Defender/ETW ~50% failure; bypass not implemented (hollow_windows.go).
Cloudflared in-process (non-Windows server) Stub on Linux/macOS; use external connector (AF_TUNNEL_EXTERNAL) or add launcher.
macOS camera / GPU miner Stubs or partial; Linux has V4L2 + nvidia-smi path.
KEV heuristics Non-Windows agents return Status: n/a (Windows-only CVE matching).
Mesh P2P without -tags p2p Default build reports 0 peers (mesh_p2p_stub.go).
Linux/macOS GPU RVN mining detectGPU() may find NVIDIA but miners download Windows .exe only.

Scale limits (hundreds of subnets / 500+ agents)

Area Notes
Subnet grouping Derived from agents.ip /24 prefix at query time; no agents.subnet column — hundreds of subnets OK via LIKE filter + dropdown (not chips).
Per-agent subnet scan Capped at 128 hosts (MaxSubnetScanHosts); syscheck uses 20 (SyscheckSubnetScanCap); spread sem=16 (SpreadConcurrencyCap). Fleet discovery is incremental (ARP + capped sweep), not full /16.
stats_batch WS Server coalesces stats every 250ms (StatsBatchCoalesceInterval) into one frame; client applies in single setAgents pass with agentStatsUnchanged skip.
Hashrate samples One INSERT per agent stats tick — dominant DB write at scale. Automated purge via StartRetentionJobs (default 168h, stats_retention_hours).
Stale-agent sweep Every 45s (StaleAgentSweepInterval) queries status='online' AND last_seen < cutoff (ListStaleOnlineAgents, composite index) — not a full-table scan. Still O(stale-online) broadcasts per sweep.

Container Mining

Topic Notes
Fallback chain agent/miner/fallback_chain.go orchestrates container → in-process → GPU (parallel) → Stratum overlay. Failures in failed_methods[] on stats WS (tested). 30s cooldown between full re-passes (DefaultChainCooldown, RestartChain clears).
Default execution Forge default is auto (full chain). inprocess/container/subprocess limit which steps run. Forge shows worker-image build hint when auto/container selected.
AV limits (honest) Containers are not invisible — AV still sees docker.exe, image pulls, and container filesystem scans. Legitimate benefit is isolated workload and fewer host subprocess spawns (GPU T-Rex/TRM). In-process RandomX has no external CPU miner exe.
GPU in container Linux --gpus all stub only; Windows Docker Desktop GPU passthrough is operator-dependent. Host subprocess GPU path remains fallback.
Worker image aetherforge/agent-worker:latest (override AETHERFORGE_MINER_IMAGE). Build from docker/Dockerfile.agent; Forge live notice + FieldHint on Miner Execution.
Container hashrate Host relays container worker H/s via MINER_STATS_FILE + ProbeHashrate() when hostMiningDisabled (dashboard no longer stuck at 0).
Deferred Auto-build/push worker image in forge; Podman rootless on Windows.

Architecture deferred (large)

Area Notes
tunnel_stream Server-side TCP reverse relay documented as future (README.md).
Path Tracer sessions TraceSession in handler RAM; restart loses state; no DB persistence or startup sweep.
Non-Windows Path Tracer parity pathtracer_stub.go errors on wg_setup; chains are Windows-agent focused.
NAT / symmetric UDP UPnP + DB IP fallback; no STUN/TURN or post-config connectivity probe.
Fixed WireGuard port 51820 Same UDP port all hops; multi-agent behind one NAT may conflict.
Agent display name vs hostname WS UpsertAgent preserves operator rename when name != hostname; reconnect with hostname only keeps DB label.
WireGuard auto-download (Windows) ensureWGExe() on first Path Tracer use; heavy, may need admin; pre-install recommended.
Monolithic WebSocket context All useWebSocket() consumers re-render on any WS change; split contexts/selectors deferred.
CruciblePage size (~2k lines) Terminal + fleet + tabs in one component; section split/memo deferred.
WS init ships full fleet Dashboard connect still loads all agents in one JSON blob; pagination is REST-only (?limit=&offset=).
SQLite single-writer ceiling SetMaxOpenConns(1) + WAL; sustained 1000+ agents with per-tick DB writes may SQLITE_BUSY; consider Postgres or write batching at 1000+.
In-memory WS agent state Hub maps (agentCapabilities, agentLogs, DNS cache) grow O(agents); no eviction on disconnect beyond log trim.
Fleet topology 3D cap FleetTopologyMap renders at most 200 nodes; larger fleets need subnet-grouped view or server-side aggregation.
Crucible roster pagination Roster paginates 80 cards/page; bulk select-all still operates on filtered set in memory.
No CI HTTP forge e2e-validate.ps1 -ForgeAgent manual; live compile needs LIVE_FORGE=1 + -tags liveforge.
Non-Windows forge host PE disguise / osslsigncode signing platform-limited by design.
Mac PathForge runtime .command curl /api/download/agent-mac; needs reachable server_url + binary on server.
Terminal virtualization 400-line DOM cap only; full virtual scrollback deferred.
Vite chunk weight three + vendor warnings; FleetTopologyMap lazy but heavy first open.

Test gaps / noise

Item Notes
P1 covered (2026-06-07) 14-tier spread chain, triple-onion gates, fleet recon, Fleet AI control, personas, phenotype, failure atlas, court, clearance L0L4 — Go server 793 + agent 608 Test* + Vitest 791; see tests/README.md
Fleet evolution covered (2026-06-07) Seeder/miner split, atlas gossip, genetic breeding, BGP spread router, genealogy telemetry (non-blocking auth), court retry L4, hashrate/subnet gates, APK scout, persona temperament, WSUS mimic, erasure foundation — Go 793+608 + Vitest 791 + Playwright 25 (phase 8); master table in tests/README.md
P2 covered (2026-06-07) Mock MiningChainRunner lifecycle (mining_chain_lifecycle_test.go); spread lane templates + dispatch (spread_lanes_test.go, winrm_spread_test.go, staging/BITS mocks); Path Forge API + Forge UI incl. cancel/batch race (pathforge_test.go, BuilderPage.test.tsx); WS/beacon + file upload round-trips (ws_beacon_integration_test.go server+agent); pathtracer stub + wg_setup routing (pathtracer_stub_test.go, aggressive_commands_test.go); Path Tracer UI poll coverage (PathTracerPage.test.tsx); Emberwake WS-only war room (EmberwakePage.test.tsx); SystemStatusBar WS fleet count (components.test.tsx); flaky WS/spread-gate tests stabilized (ed9c90a); Playwright LOTL onion + discover→spread stub E2E (lotl-timeline.spec.ts, discover-spread.spec.ts); mock container/podman exec + runtime probe (container_launcher_test.go, runtime_detect_test.go); BITS/curl HiddenRun mocks (bits_windows_test.go, staging_chain_test.go); WinRM/GPO/systemd deploy-plan httptest + mock execute (deploy_plan_integration_test.go, discover_join_test.go); 3-hop discover→spread Playwright stub chain (discover-spread-stub.ts, discover-spread.spec.ts, d18c591); Vitest 791 + Playwright 25 — see tests/README.md § P2
Erasure-coded multi-lane propagation (foundation 2026-06-07) Partial / honest foundation — server internal/erasure/ ReedSolomon 4+2 encode + in-memory shard store + /api/v1/public/erasure-shard/{token}/{index}; signed deploy plans attach erasure_plan when Calibrate server.erasure_lanes_enabled; agent deploy/erasure_staging.go reassembles from parallel lane URLs as fallback when primary staging fails; BGP spread_route_hint + Path Tracer show erasure_lanes_enabled. Not shipped: live parallel lane orchestration, seeder-side shard fan-out, or erasure-first (non-fallback) spread E2E.
P2 remaining (manual only) Live Docker/Podman container start on operator host; real WinRM/GPO/systemd/crontab execution on remote owned hosts; live BITS/curl against non-mock C2 endpoints; live multi-hop discover→spread without Playwright stub; live TLS/mesh beacon; full wg_setup on real Windows hosts

Scrubbed 2026-06-07 (prod garbage removed)

Item Action
agent/config/builtin.go XMR/RVN wallets Cleared — dev builtin no longer ships third-party addresses
server/config.go builtin Cloudflare token Removed — connector requires env/config/cloudflared-token.txt
data-e2e/, music/, scratch/ in repo Untracked + .gitignore (E2E wallet stays in docker/ + e2e-validate.ps1 only)
Mission Deck forge bar Replaced client-side stage timer with server GET /builder/progress/{token} poll

Do not commit

  • data/login-credentials.json, data/users.json, and other local secrets.