Skip to content

Greenfield bootstrap broken: fresh agent cannot establish a trade loop (live-reset findings) #17

Description

@jdkajewski

Summary

Ran the TS bot LIVE on a fresh weekly reset (new agent UPRISING, HQ X1-SQ96, 175k cr, 2 ships: 1 FRIGATE + 1 PROBE). Despite extensive ops-level tuning, the bot never executed a single trade and stayed at ~68k credits. Multiple compounding bugs prevent greenfield bootstrap. Each is individually fixable; together they make a fresh agent dead-on-arrival.

Bugs found (in priority order)

1. OPERATING_RESERVE freezes all spending (CRITICAL, has ops workaround)

Default OPERATING_RESERVE=200000 + goods cushions → computed reserve 325,288 > 175,000 starting capital → bot refuses to buy ships OR trade (capital-preservation). Only free actions (contract mining) ran.

  • Fix: reserve must scale to current credits (e.g. min(OPERATING_RESERVE, credits*0.1)) or default low. Workaround that worked: OPERATING_RESERVE=5000 GOODS_CUSHION=2000 GOODS_CUSHION_PER_SHIP=1000 RESERVE_CONCURRENCY=1 → bot immediately began buying probes.

2. Phase engine routes greenfield → GATE_* instead of PROFIT (CRITICAL, no ops fix)

With an unbuilt gate present in-system, determinePhase() returns GATE_DISCOVERY / GATE_SUPPLY even at 68k credits. The bot does not run the profit trade loop in these phases. Even with GATE_SUPPLY=0 AUTO_EXPAND=0, it stayed in GATE_DISCOVERY and idled. A fresh low-capital agent must be in PROFIT (trade to build capital) until it can afford gate work.

  • Fix: gate phases should be gated on capital/credit-floor, not merely gate-existence. Below a credit threshold, stay in PROFIT.

3. Trade dispatch never fires for a single trader (CRITICAL)

A genuinely profitable lane existed (LAB_INSTRUMENTS C40→A4, net 2,068/u × vol 20 ≈ 41k/trip, well above MIN_NET=500) with the markets priced in the DB, a capable cargo ship (FRIGATE cap 40), and capital — yet the frigate sat idle. Worker listed G-1 but emitted no trade action. (Related to #2 phase + possibly the ship being parked at a non-market asteroid.)

4. Mining yields nothing (the default starter contract path)

Bot accepted the starter PROCUREMENT contract (76 ALUMINUM_ORE) and sent the FRIGATE to an asteroid to mine. Frigate HAS MOUNT_MINING_LASER_II but produced 0 ore in 13+ min while cycling cooldowns; mine-events telemetry PUTs return 400 (contract mismatch, same family as the markets bug #8). The sole cargo ship was stuck on an impossible task. TRADE_FIRST=1 did not override the in-progress contract.

5. Ships default to DRIFT not CRUISE (greenfield speed killer)

With no known fuel markets at boot, ships navigate in DRIFT (e.g. 40–58 min for an intra-system hop) even when fuel is full (399/400). Seeding home markets (issue #16) gives fuel knowledge → should switch to CRUISE.

6. Home markets not eagerly mapped at boot (issue #16, confirmed)

Boot loads 0 markets; relies on the slow background crawler → 0 priced markets for a long time → no lanes. Manually seeding the home system's 26 markets (PUT /markets) immediately let the bot load them and scan-sweep. Should eager-fetch home-system waypoints+markets right after resolveHome().

Repro

Fresh-reset agent, docker compose --env-file deploy/bot.greenfield.env up. Observe: 0 trades, credits flat, frigate stuck mining 0 ore, phase GATE_*.

Minimum to make greenfield earn

Fix #1 (reserve scaling), #2 (phase capital-gating), #3 (single-trader dispatch). #4/#5/#6 are accelerators. Recommend a dedicated greenfield bootstrap path: eager-map home markets → CRUISE → PROFIT-trade the best lane with the starter ship → buy a 2nd trader → scale.

Related: #8 (markets write contract), #15 (large-fleet takeover), #16 (eager home-market bootstrap).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions