# Bug-Report: Absturz — ScrapBot01 ruft UpdateMob mit alter Signatur

- Typ: bug
- Datum: 2026-09-27 (Crash-Log vom 2026-09-12)
- Session: tll87505j2nmujorqoe (Bug-Chat, manuell analysiert)
- Version: ~0.4.1.x
- Melder-Notiz: „passiert beim Setzen eines Thief-Bots im Debug-Modus via Unit-Fenster" (Stack zeigt ScrapBot01)

## Zusammenfassung
`UpdateMob`'s `inputContract` erwartet `UnitIndex` als Number, bekommt aber
die `TargetList`-Tabelle — `ScrapBot01.lua:93` ruft `UpdateMob` noch mit der
alten 4-Argument-Signatur auf.

## Fehler
```
Error: Libraries/Test/AssertContract.lua:18: AssertContract.lua 	 : wrong format for UnitIndex , it is a table , it should be a number
Update/Units/UpdateMob.lua:32: in function 'inputContract'
Update/Units/UpdateMob.lua:178: in function 'UpdateMob'
Data/Units/ScrapBot01.lua:93: in function 'Update'
Update/UpdateUnits.lua:194: in function 'updateUnit'
Update/UpdateUnits.lua:222: in function 'UpdateUnits'
```

## Technische Analyse
`UpdateMob` hat die Signatur `(UnitData, UnitPosition, UnitIndex, Map,
TargetList, AttackData)` (6 Parameter) und nutzt intern `Map["Machines"]`,
`Map["Conveyor"]`, `Map["UnitList"]`. `ScrapBot01.Update` ist der **einzige**
Caller und übergibt nur `(UnitData, UnitPosition, TARGETLIST, ATTACKDATA)` —
`TARGETLIST` landet im `UnitIndex`-Slot → Contract-Assert.

Die Verkettung ist kaputt: `UpdateUnits.updateUnit` (Z. 190-196) ruft
`UnitDB[...].Update(UnitData, UnitPosition, AnimationTick)` — UnitIndex und
Map werden gar nicht bis zur Unit durchgereicht. `UpdateThiefBot` nutzt
dagegen einen eigenen 3-Arg-Updater ohne UnitIndex/Map.

Fix-Richtung (braucht Design-Entscheidung):
- Entweder `UpdateUnits.updateUnit` reicht `index` + die Asteroiden-Map an
  `Unit.Update` durch und `ScrapBot01` gibt sie an UpdateMob weiter
  (bricht die `Unit.Update`-Signatur für alle Units), oder
- `UpdateMob` beschafft sich Map/Index selbst (MapInfo/GetMap des aktiven
  Asteroiden; Index aus der UnitList-Suche) und der Contract wird angepasst.
- Danach prüfen, ob `UnitIndex` in UpdateMob überhaupt gebraucht wird
  (`UpdateUnitPosition(UnitPosition, UnitIndex, UnitData)`) — evtl. reicht
  ein Lookup.
