Skip to content

Latest commit

 

History

History
64 lines (58 loc) · 3.82 KB

File metadata and controls

64 lines (58 loc) · 3.82 KB

Ghost Fleet: overnight autonomous run

Goal: an honest SOTA live system by morning. Accumulate real data, and the moment sanctioned-vessel positives cross the honest threshold (12), train, register, deploy shadowscorer, and the app scores itself.

Fixes shipped this session

  • collector: dropped positional sys.argv parse (scheduled runs inject -start_time and crashed every cron fire). Env-only now. Redeployed.
  • train: get_feature_view returns None (not raise) for a missing FV, so the FV was never created; guarded. FV shadow_vessel_fv now exists.
  • gfw: added a wall-clock budget (GFW_BUDGET_MIN, default 12) so the 500-vessel identity loop cannot lap its own hourly cron. Redeployed.
  • predictor: on-demand fusion restricted to AIS-behavioural cols (a bare track no longer erases stored flag/gfw/identity signal); guarded the empty-registry max([]) crash.
  • ghost_features: removed hardcoded 2026; added ONDEMAND_COLUMNS.

All blockers recorded in ml-systems-playbook/BLOCKERS.md.

Decision rule (the loop)

  • positives < 12: keep accumulating (collector + gfw are scheduled).
  • positives >= 12 and no model: run fleet-train.
  • model registered, no deployment: make serve (deploy shadowscorer).
  • deployed: app auto-attaches (score_loop polls get_deployment).

Status

Updated each loop tick below (newest first).

  • ~03:15Z SYSTEM LIVE. Mission complete, loop ended. The nightly train (02:40) caught positives >= 12 and registered shadow_vessel v1: lift 9.4x over the blind baseline, ROC-AUC 0.92 (honest population-split metrics). Deployed shadowscorer (KSERVE, Running). Live predictions verified end to end: a Cameroon-flag vessel scored 0.96, a normally-behaving sanctioned RU vessel scored 0.002 (behaviour, not list-membership, exactly the honest design). App running and auto-attaching. Counts: vtf 8,958, identity 1,752, positives fluctuating ~11-12 as F2 rebuilds. The HDFS flap remains a background platform condition (some job runs fail and retry) but does not touch the live serving path. FTI chain complete: feature store -> model -> KServe -> app.
  • ~23:52Z positives 10/12 (stuck on the flap). HDFS transient widened, failing collect/gfw/F2 intermittently; F2 keeps missing so vtf is frozen at 5,864. ais_position still grew to 32,093 (collector wrote before failing) so the data to cross 12 is banked. fleet-network succeeded 2min ago, so the flap is intermittent, not a hard outage. No thrashing, no deletes: waiting for a clean F2 window and the :00 crons. Model gate holds honest at 12.
  • ~23:40Z positives 10/12 (up from 5). ais_position recovered to 25,450, vtf 5,864, identity 972. Scheduled F2 (:30) succeeded; the HDFS transient is still flapping intermittently (a manual F2 I triggered hit it reading vessel_identity, harmless). Not thrashing: letting the :00 cron F2 capture the crossing. GFW budget confirmed clean (in-budget run, 382 identities). Collector single-writer, healthy.
  • ~23:20Z INCIDENT + RECOVERY: a transient job-pod HDFS read fault (~23:00-23:15Z, raw HdfsObjectStore -1 error, not our code) failed the collector writes and F2's read of ais_position. Terminal-pod reads/writes and all other FGs stayed healthy, so it was job-pod-scoped, not a cluster storm. I deleted ais_position on a corruption guess that the fresh-table retest disproved (it was transient); low cost, it is refilling. Job pods recovered ~23:16Z: collector flushing again, ais_position back to 6,023 and climbing. Derived data intact (vtf 4,195, identity 972). GFW budget fix confirmed working (ran in-budget, identity 590 -> 972). positives will recover as F2 reruns on the healthy table.
  • baseline: ais_position 26,186; vtf 4,195; vessel_identity 590; gfw_event 3,342; positives 5/12. All pipelines green. Accumulating.