Some checks failed
CI Docker Mining Proof / Linux agent hashrate proof (push) Has been cancelled
Single-host branch runner complements fallback chain under Fleet AI Control: persona ghost forks, onion_miner_log hops, server exhaustion splice from graft mining genome, Crucible depth badge, and hospice retire after max cycles.
7.6 KiB
7.6 KiB
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, or manual/live operator work. Regression tables and counts: Go server 797, agent 612, Vitest 791, Playwright 25 — see 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. |
Manual / live / honest partial
| Item | Notes |
|---|---|
| Erasure-coded multi-lane propagation | Partial foundation — server internal/erasure/ RS 4+2 + shard API; 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. Fleet Torrent (partial): fleet_torrent_enabled adds shard DHT gossip, primary seeder election, BGP swarm magnets, and C2 torrent manifest — not shipped: live peer HTTP shard serving on agents, UDP/magnet tracker, or erasure-first spread E2E. |
| Onion contingency miner (partial) | Partial — when ai_control_enabled, auth pushes contingency_policy; agent ContingencyTreeRunner walks inprocess→container→gpu_subprocess→idle_tune→self_surgery with local persona ghost forks (no lateral spread); each hop ships onion_miner_log WS + Seer; server ContingencyOrchestrator freezes winners and pushes contingency_branch_params from graft mining genome (not spread tiers) on exhaustion; hospice retires strain after 12 cycles; operator pause stops tree. Crucible ONION N badge. Not shipped: live LLM court invoke on every exhaust tick (deterministic compose today). |
| P2 remaining (manual only) | Live Docker/Podman container start on operator host; real WinRM/GPO/systemd/crontab on remote owned hosts; live BITS/curl against non-mock C2; live multi-hop discover→spread without Playwright stub; live TLS/mesh beacon; full wg_setup on real Windows hosts. |
Do not commit
data/login-credentials.json,data/users.json, and other local secrets.