Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
261 lines
22 KiB
Markdown
261 lines
22 KiB
Markdown
# AI migration progress — 20 September 2026
|
||
|
||
## Memory-based native search area — 3 October 2026
|
||
|
||
Ordinary ground SEARCH tasks now snapshot the delivered belief's uncertainty at assignment or retasking, clamped to 45–110 m. On radio delivery HQ rejects a non-finite or out-of-range snapshot before waypoint allocation and before replacing the current assignment. The waypoint receives its radius once before group installation. A later change to the live belief cannot silently resize an already queued order. No extra force, setting, deadline extension or player-position query is introduced.
|
||
|
||
The native SearchAndDestroy activity uses this value as the investigation grid's square half-width. The larger grid adds cell and navigation work; neither the cap nor the offline tests establishes an FPS improvement. Missing-patrol investigation, road/site-security defence, INTERCEPT/CONTAIN and the air-team system's separate direct task remain unchanged. The Workbench patrol fixture initializes the same snapshot for future runs.
|
||
|
||
Negative-search reporting still requires an attributed fit original member within 40 m of the centre for 30 continuous seconds, no native contact, and radio delivery. That witness marks one coarse 500 m cell, not a completely searched square. Larger physical searches may provide fewer such completion opportunities; this change does not weaken the witness.
|
||
|
||
All 305 registered regression programs pass; native compilation, physical search behavior, multiplayer and performance for this source change remain unverified. [Source, regression controls and SDK metadata](evidence/hq-search-radius-2026-10-03/README.md).
|
||
|
||
Current convoy implementation: [Supply convoys](supply-convoys.md) supersedes the single-convoy stages recorded below.
|
||
|
||
|
||
The successor now has a persistent HQ belief model, bounded infantry pursuit,
|
||
radio check-ins, missing-patrol investigations, local body discovery and a Core
|
||
force ledger. These extend the existing playable mission and finite mortar/courier
|
||
systems. They do **not** complete the living-island plan, all predecessor AI
|
||
features, or multiplayer/release qualification.
|
||
|
||
This checkpoint describes the source captured by the native tests at **01:47:53**
|
||
and **01:52:20**, plus the focused regression corrections completed afterward.
|
||
Later convoy or planner changes need their own evidence; the results below do not
|
||
qualify edits made after those snapshots. Existing base-loop and packaged-playtest
|
||
history remains in [current status](current-status.md).
|
||
|
||
## Implemented in this checkpoint
|
||
|
||
| Area | Actual behavior and boundary |
|
||
| --- | --- |
|
||
| Core force ledger | [Ledger](../addons/core/Scripts/Game/ERR/00_Core/ERR_ForceLedger.c) and [simulation](../addons/core/Scripts/Game/ERR/00_Core/ERR_ForceSimulation.c) retain up to 128 formation identities, initial strength, casualties, duty, home position and authored routes. Six existing site groups register before HQ consumes them; other ready physical enemy groups register through GameMode. Physical snapshots count unconscious members as living. Eliminated/retired identities cannot restore strength through re-registration. |
|
||
| Dormant arithmetic | A pure route simulator advances nonphysical records on a staggered two-second schedule, with 1.4 m/s walking and 11 m/s convoy rules, authored elevation interpolation and bounded whole-lap skipping. It performs no terrain, navigation, player or entity queries. This supplies the arithmetic foundation; production presence arbitration and member materialization are still missing. |
|
||
| Delivered belief | [Memory](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQMemory.c) retains up to 64 delivered tracks independently of short-lived fire contacts. Sightings decay with a 600-second confidence half-life and widening uncertainty. Credible successive reports infer motion; extrapolation is capped at 30 seconds/300 metres. Body and distress reports begin weaker and do not infer a moving enemy. Target handles are identity keys, not live-position sources. |
|
||
| Pursuit and objectives | [Pursuit rules](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQPursuit.c), [doctrine](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQDoctrine.c) and HQ assign existing eligible infantry to intercept, search or contain objectives. Age/confidence restrict precision, travel distance affects task lifetime, and stale/new report revisions control replacement orders. Actual downlink delivery precedes native waypoint changes. Home guards, busy/support units, two approach sectors and finite task lifetimes constrain commitments. Doctrine uses authored objectives and reported headings; it does not claim road-route or player-goal knowledge. |
|
||
| Searched areas | [Coverage](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQCoverage.c) records at most 128 visited 500 m cells for 900 seconds, using delivered completed sweeps. Replay/revision guards prevent repeated or outdated negative reports from reducing a newer belief. Fresh positive sightings reopen their cell. Reserved destinations prevent concurrent reuse. A coarse visited cell is not proof every building or hiding place was searched. |
|
||
| Routine status | [Sampler](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQStatusSampler.c) retains each formation's initial roster, up to 32 members. Only valid retained corpses with explicit destroyed damage state count as local confirmed deaths; missing references, transferred members and unconsciousness do not. A detached status needs a surviving original owned radio caller. [Watch](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQWatch.c) changes HQ's roster only after uplink delivery. |
|
||
| Missing patrols | Routine check-ins are scheduled every 180 seconds. After two missed check-ins, HQ attempts a request and allows 30 seconds for a reply, even if no route exists. One existing eligible patrol may investigate the missing unit's **last delivered** position. Source/status/request identities reject late completions; a fresh check-in resolves the case and cancellation travels through radio. Silence never proves a death or creates an exact enemy target. |
|
||
| Body discovery | [Body observer](../addons/core/Scripts/Game/ERR/10_AI/ERR_HQBodyObserver.c) uses a bounded own-force registry, a rotating window of at most 16 corpses, a 15-second per-group scan cadence and a shared trace budget. Physical observers need range/facing and native visibility checks. Discovery becomes low-confidence casualty evidence only through radio, with cause unknown; it cannot authorize precise fire. |
|
||
| Skill and rare anti-air equipment | [Equipment service](../addons/core/Scripts/Game/ERR/10_AI/ERR_EnemyEquipment.c) binds an Expert minimum only to eligible registered enemy actors and restores the captured skill on release. Finite startup Stinger selection defaults to one in 15; `/esc hq stinger show\|set N` supports disabling or changing future selections. Pending/late inventory callbacks do not cause replenishment after success, firing, dropping or looting. See the [equipment audit](ai-equipment-migration.md) for owned-source hashes and exact limitations. |
|
||
|
||
The original owned `SquadLimit` behavior **raises**, rather than shrinks, the
|
||
shared commitment ceiling: `baseline + floor(confirmed losses / 2)`, capped at
|
||
eight; a zero baseline stays disabled. This corrects the contradictory wording
|
||
in the existing [T10 brief](living-island/T10-ai-migration.md), which is preserved.
|
||
Current production additionally limits hunters across all beliefs to three and
|
||
allows only one separate missing-patrol investigation. Thus the eight-squad
|
||
ceiling is not a promise to deploy eight hunters or spawn replacement troops.
|
||
|
||
## Native evidence and its limits
|
||
|
||
| Captured run | Observed result | What it establishes |
|
||
| --- | --- | --- |
|
||
| [HQ memory 01:47:53](evidence/native-2026-09-20-014753-hq-memory/report.json) | 56 total assertions, one completed scripted round, zero script/runtime failures; four engine errors retained. | Actual six-site ledger registration and detached elimination; immutable memory snapshots and bounded prediction; a synthetic report blocked by removing the transmitting radio; later real radio delivery reaching production intake once; delivered negative-sweep effects, replay protection and rejection of an old sweep revision. Actual command Stop clears history. The ten-minute advance is a value-clock fixture, not ten real minutes of gameplay. |
|
||
| [HQ response 01:52:20](evidence/native-2026-09-20-015220-hq-response/report.json) | 35 total assertions, one completed scripted round, zero script/runtime failures; the same four engine errors retained. | An arranged sighting produces actual native perception, report, uplink, HQ receipt and downlink lineage. A distinct original infantry group physically moves toward its native Search waypoint with bounded unique orders, without adding or replacing a force. This is not the two-UAZ convoy described in T10. |
|
||
|
||
Both runners recorded unchanged successor source and six unchanged external addon
|
||
inputs, hidden Gamescope displays, silent/muted test audio, and confirmed owned
|
||
cleanup. Their [memory runner](evidence/native-2026-09-20-014753-hq-memory/runner.json.txt)
|
||
and [response runner](evidence/native-2026-09-20-015220-hq-response/runner.json.txt)
|
||
retain these facts and exact launch manifests.
|
||
|
||
**Neither run passes the strict native qualifier.** The four retained errors are
|
||
GUID/name mismatches in external string tables: `rhs_localization.st`,
|
||
`wcs_armament_localization.st`, `wcs_spacecore_localization.st` and
|
||
`wcs_bmp1_localization.st`. Smoke completion and zero script failures do not erase
|
||
resource errors or establish a clean build. These external localization errors
|
||
are separate from the earlier packaging shutdown failures.
|
||
|
||
The journals also show routine status messages reaching HQ and a physical FIM-92
|
||
observed in a weapon slot. The memory run records another selected actor reaching
|
||
its bounded equipment deadline. This is limited runtime observation, not proof
|
||
that every selection succeeds, that skill restoration works in multiplayer, or
|
||
that native AI launches the Stinger correctly.
|
||
|
||
The fixtures do not prove the complete six-and-a-half-minute missed-check-in
|
||
sequence, ordinary corpse discovery, long pursuit/containment play, twelve real
|
||
clients, remote ownership, full ordinary escape, aircraft operations or FPS gains.
|
||
The current status/body/equipment classes compile in the captured source; their
|
||
additional lifecycle cases are covered by focused regressions rather than those
|
||
native assertions.
|
||
|
||
## Radio scheduling follow-up
|
||
|
||
Due routine status and requested check-ins now claim the next free uplink before
|
||
new visual reports. An occupied transmission is never replaced. A regression of
|
||
the actual report methods reproduced the old starvation at five-second sighting
|
||
intervals over a six-second route: no status arrived during ten simulated minutes.
|
||
The revised ordering delivers periodic status while continuing visual reports.
|
||
Search completion also samples the physical group's native visible contacts before
|
||
accumulating its thirty-second dwell, including while another report occupies the
|
||
radio. A quiet combat flag alone cannot produce an area-clear report. These new
|
||
scheduling cases have method-level regression coverage; the earlier native memory
|
||
and response archives predate this follow-up.
|
||
|
||
## Repository checks
|
||
|
||
Actual extracted Enforce method bodies are exercised by the force-ledger,
|
||
HQ-memory, pursuit, doctrine, coverage, watch, status-sampler, body-observer,
|
||
equipment and assignment-lifecycle tests. The ledger harness advances 128 records
|
||
for a simulated hour; this is arithmetic regression coverage, not an engine FPS
|
||
benchmark. Intel readiness tests verify late physical binding without duplicate
|
||
HQ units or new Intel rolls.
|
||
|
||
The repository check list completed in two parts: the successful prefix, the
|
||
corrected packed-archive suite (26 tests), then all 58 remaining suites without
|
||
failure. The archive correction constructs its synthetic historical five-addon
|
||
payload from the frozen packed schema, rather than copying today's externally
|
||
dependent AI project. An added regression confirms external dependencies still
|
||
fail that frozen packed closure. Validation was not weakened.
|
||
|
||
## Physical convoy follow-up
|
||
|
||
The [finite convoy controller](convoy-migration.md) now integrates the six-vehicle
|
||
owned convoy composition, nineteen explicit native seat occupants, finite physical
|
||
truck cargo, shared Core admission budget, real-road preparation and canonical HQ
|
||
admin dispatch. A new independently authored memberless group prevents vanilla's
|
||
queued six-soldier allocation from bypassing that budget. Native seated-group
|
||
waypoint completion drives route advancement. The02:50:35 native run completes181
|
||
assertions with exact original identities and actual movement, while retaining the
|
||
four external localization errors. It remains an opt-in first physical slice;
|
||
combat tactics, unloading, automatic scheduling and full-route reliability are
|
||
still pending. The earlier feature inventory counts remain explicitly baseline
|
||
counts, not an assertion that this follow-up was present at that older commit.
|
||
|
||
## Delivered casualty reconciliation follow-up
|
||
|
||
Status snapshots and body observations now carry slots from the same immutable
|
||
initial formation roster. Watch unions those delivered identities rather than
|
||
adding aggregate totals: a casualty reported by both its squad and a passing
|
||
patrol counts once, while a different discovered body adds one. Local death
|
||
sampling and a queued or interrupted report cannot change HQ's casualty total.
|
||
|
||
Body evidence preserves the last actual check-in's ID, observation time and
|
||
position. A later check-in from a caller who has not seen an outside discovery is
|
||
still accepted without resurrecting a confirmed casualty. When every original
|
||
slot has delivered death evidence, Watch can close a wiped formation without
|
||
inventing a surviving caller. A scalar source/slot snapshot remains usable when
|
||
the corpse reference disappears during radio transit. Known transfers and player
|
||
conversions permanently exclude the released slot; another actor cannot replace
|
||
it. Body evidence with no previous check-in leaves status position and current living/fit
|
||
counts unknown rather than inventing a corpse-position check-in.
|
||
|
||
The full repository checks pass after this integration. The actual Watch,
|
||
Report.Snapshot and HQ.Accept methods run together in regressions for overlap,
|
||
disjoint casualties, deletion in transit, new locally uninformed status and wipe
|
||
closure. Sampler/body tests cover immutable slot ordering, released members and
|
||
a deleted native group handle with a retained corpse. These adapters are not
|
||
native LOS or radio evidence; that qualification is tracked separately.
|
||
The [02:57:26 HQ response regression](evidence/native-2026-09-20-025726-hq-casualty-integration/report.json)
|
||
compiles these changes and completes35 assertions through actual perception,
|
||
uplink, HQ receipt, downlink and movement of a distinct original squad. It has no
|
||
script/runtime failures; the four external localization errors remain. This
|
||
regression does not yet prove actual corpse observation.
|
||
|
||
## Native body and radio follow-up
|
||
|
||
[03:05:33 body/radio run](evidence/native-2026-09-20-030533-body-radio-casualties/report.json)
|
||
completes one scripted round with45 assertions and no script/runtime failures.
|
||
One existing non-radio enemy was moved once beside another original living guard
|
||
formation and killed using native character damage. Production BodyObserver's
|
||
native LOS created the snapshot. The test inspected the actual pending uplink,
|
||
verified no HQ loss before delivery, then observed precisely one delivered
|
||
casualty and a low-confidence BODY belief with no fire contact. The victim's
|
||
surviving caller sent its real cumulative death-slot status afterward; HQ still
|
||
counted one loss, including twenty further seconds of observation.
|
||
|
||
The fixture temporarily postponed that formation's check-in to isolate body
|
||
report causality, then resumed it. It created no actors, groups or synthetic
|
||
reports and never injected Watch knowledge. This is an arranged native visibility
|
||
case, not organic patrol discovery or an all-dead native formation. Scalar
|
||
in-transit deletion and full-wipe closure remain actual-method regressions.
|
||
|
||
The same source includes the reviewed transfer-before-death fix: a retained
|
||
non-null foreign group releases the old roster slot before either status or body
|
||
attribution; a null group on a destroyed actor remains valid native detachment.
|
||
A two-formation regression reproduced the previous double count and now confirms
|
||
only the destination roster counts the known transferred casualty.
|
||
|
||
The four external localization errors still prevent strict native qualification.
|
||
Source and all external inputs remained unchanged; hidden/muted owned-process
|
||
cleanup was confirmed. The full repository suite passed after casualty integration;
|
||
the subsequent transfer guard and fixture additions passed their focused checks,
|
||
source-bundle preview and native compilation. All533 protected original reference
|
||
files remained unchanged.
|
||
|
||
## HQ convoy cover and ammunition follow-up
|
||
|
||
The finite convoy now accepts per-vehicle HOLD/RESUME commands through each
|
||
original crew's existing HQ radio downlink. Planning requires a delivered own
|
||
status no older than 180 seconds and a delivered positive sighting less than
|
||
60 seconds old within 400 m of that reported position. Delivery rechecks evidence,
|
||
command/sighting lineage, the consumed source receipt, exact original crew and
|
||
physical Core record. HOLD preserves the route index while removing the owned
|
||
move waypoint; RESUME needs fresh own status and no qualifying contact after the
|
||
held sighting's 60-second window. Lost radio or superseding information cannot
|
||
silently resume travel. Native `AddUsableVehicle` admission supplies the mounted
|
||
combat hooks; actual gunner firing remains an engine validation question. Player
|
||
capture still releases the task without replacing its vehicles, crew or cargo.
|
||
See [convoy cover details](convoy-migration.md#delivered-hq-mounted-cover-follow-up).
|
||
|
||
Routine 180-second status now includes detached compatible small-arms magazine
|
||
and chamber counts from the immutable own roster. Only a delivered, complete,
|
||
no-older-than-180-second report proving zero small-arms rounds/chambers can veto a
|
||
new armed infantry assignment or its delivery. Unknown/stale information never
|
||
pretends to be empty; existing assignments and release commands are preserved.
|
||
Separate launcher fields do not drive this initial veto. The addition does not
|
||
migrate urgent refill requests, vehicle ammunition, general resupply or ammo
|
||
creation. See [HQ ammunition scope and tests](hq-ammunition.md).
|
||
|
||
Actual-method regressions cover both additions. The full repository check passed
|
||
at the integration checkpoint and the original-reference guard retained all 533
|
||
protected files unchanged. Those checks do not supply native radio/weapon or
|
||
inventory evidence by themselves. The [native ammunition follow-up](evidence/native-2026-09-20-040857-hq-ammunition/report.json)
|
||
completes 49 assertions: real original-roster ammunition counts, actual radio
|
||
delivery and detached unchanged Watch data, alongside the existing casualty
|
||
checks. No script/runtime failures occurred; four external localization errors
|
||
remain. [Ammunition documentation](hq-ammunition.md#validation-boundary) retains
|
||
the failed attempts and scope, including the later derived-well refinement.
|
||
The [current-source convoy recheck](evidence/native-2026-09-20-041150-convoy-cover-driving/report.json)
|
||
completes 181 assertions with original crew/cargo and all six vehicles driving;
|
||
source/dependency identity and cleanup are confirmed, with the same four external
|
||
localization errors. Native HOLD/RESUME combat transitions still need direct runtime proof; policy
|
||
regressions are not gunner firing, multiplayer or FPS evidence.
|
||
|
||
## Remaining work
|
||
|
||
- **T2 presence and a real shared active-agent budget:** materialization,
|
||
dematerialization, observer exclusions, hysteresis, dwell time and exact loss
|
||
preservation. Route progress must be reconciled when a moved physical patrol
|
||
becomes dormant. Current arithmetic alone does not reduce active AI cost.
|
||
- **Occupation and broader activity:** authored checkpoints, conditional guards,
|
||
smart actions, ambient signals and HQ deployment objectives from T3–T7/O1–O6.
|
||
Current objective scoring is not a completed occupation state machine.
|
||
- **Ground and air capabilities:** the T10 hunter convoy, road routing/reactive
|
||
roadblocks, planner-selected reconnaissance flights and operational shared-pool
|
||
air transport were not present in these native snapshots. Independent aircraft
|
||
experiments and historical courier/mortar tests are not proof of those features.
|
||
- **Broader loss-reconciliation qualification:** the single arranged native
|
||
corpse/radio/status-overlap case below passes. Ordinary patrol discovery,
|
||
deletion during real radio transit, complete native wiped formations and remote
|
||
ownership still need their own evidence; silence alone never proves casualties.
|
||
- **Further companion behavior:** full road supply convoys, broader ammunition
|
||
chains, HQ-deployed mortar sites, aircraft servicing/recovery, improvised-prison/crash starts and
|
||
optional warned mine-laying remain separate migrations or qualification work.
|
||
- **Play and release validation:** adversarial radio interruptions, captures,
|
||
simultaneous investigations/retasking, long sessions and real multiplayer;
|
||
equivalent-workload FPS measurements; clean external resources/native packaging;
|
||
and refreshed packages bound to the final source. The earlier playtest PAKs do
|
||
not contain this checkpoint merely because their editable source folder exists.
|
||
|
||
Core remains vanilla-only. The AI project now declares the user-authorized
|
||
RHS/WCS/BMP dependencies recorded in [external policy](external-addons.json), with
|
||
six installed addons in the audited closure; external asset bytes remain outside
|
||
this repository. The earlier vanilla-only full-scenario package and release
|
||
acceptance wording therefore describe an older scope. This document does not
|
||
silently promote or rewrite the [pending acceptance cases](acceptance.json),
|
||
[original responsibility inventory](original-feature-coverage.md), or the
|
||
preexisting living-island design documents. No complete original-feature parity
|
||
or release-completion percentage is claimed.
|