Files
EscapistsReintroduced/docs/evidence/engineer-movement-2026-10-03/review/review.json
T
jakub 6a667d8deb Capture current mission, AI, map and administration development
Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
2026-10-13 22:52:53 +02:00

52 lines
4.0 KiB
JSON

{
"complete": true,
"finding": "Confirmed owned behavior omission: EngineerMine.Begin and active Owned checks do not consult current group autonomous-position permission before forcing individual mine movement.",
"owned_source": "EAI_HQRoadblocks.UpdateUnit checks utility.IsPositionAllowed(point) before mine task admission.",
"native_semantics": {
"method": "SCR_AIGroupUtilityComponent.IsPositionAllowed(vector pos):917",
"defend": "Strict3D distance from current SCR_DefendWaypoint origin < completion radius",
"other": "Strict3D distance from group center of mass < configured max autonomous distance",
"not_proven": "This is neither path reachability, navmesh validity nor a general forbidden-zone database."
},
"compatibility": "HQ.DeliverOrder selects native AIWaypoint_Defend.et for RoadIntercept and does not override its30m completionradius. Mine selector25\u201360m therefore has a viable25..<30m3D subset. Do not widen the native radius or infer all mines would be disabled.",
"minimal_policy": "In Owned(), require current m_Group.GetGroupUtilityComponent() and IsPositionAllowed(m_Position). Begin already invokes Owned before shared item tombstone and movement; Tick invokes it before removal/placement and again before activation. Dynamic restriction/missing utility stops work, preserving original unarmed item/quarantine rules. No need to change force quotas, spawn, routes or radii.",
"bounded_trigger": "Otherwise valid assigned road-intercept group on native30m defend waypoint; clear mine candidate50m away. Current Begin passes its25\u201360m check and issues individual move despite IsPositionAllowed=false. Source sequence established; no runtime compiler test performed by this reviewer.",
"test_boundaries": [
"25m allowed, exactly30m refused with defaultdefend30",
"XZ25m/Y20m refused because native check is3D",
"nondefend current autonomous-distance boundary",
"activeallowed\u2192forbidden or missingutility stops before next sideeffect",
"late removal completion afterStop cannot arm or restart"
],
"sdk_bindings": [
{
"pak": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data/data007.pak",
"path": "Prefabs/AI/Waypoints/AIWaypoint_Defend.et",
"sha256": "af7fc17d89c30845acf0ef0fa5fedb47120072221c6157cd4ee691c121ae5d03",
"local_same": true
},
{
"pak": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data/data007.pak",
"path": "scripts/Game/AI/Components/SCR_AIGroupUtilityComponent.c",
"sha256": "d808ed61832e55001f49a5be87b6117341ebfa12a972a839de8c5a8ecd6590eb",
"local_same": true
}
],
"source_hashes": {
"/home/jakub/devel/escapistsrereintroduced/addons/core/Scripts/Game/ERR/10_AI/ERR_EngineerMine.c": "e0098577626e719283cf4b40936e7ec038076c4bab9269fbad0b5ad3292e01e3",
"/home/jakub/devel/escapistsrereintroduced/addons/core/Scripts/Game/ERR/10_AI/ERR_HQ.c": "5d66c53baf8762e76ae59e28721edaa348014af6d988d42891d9a84a6cf44969",
"/home/jakub/devel/escapists/escapists-ai/Scripts/Game/EscapistsAI/EAI_HQRoadblocks.c": "128776f0b448162ee36cfc71b2a38d2cd06d6d6e4679253f215896aa3fcabb98"
},
"scope": "Read-only owned/native/source inspection. No successor/original edits, compiler or native run. Author/tests coordinated separately.",
"proposal_review": {
"approved_source": true,
"source": "/tmp/erri-base-review-0558/addons/core/Scripts/Game/ERR/10_AI/ERR_EngineerMine.c",
"sha256": "fe05cb6e813155d76fd497788aa92c9dd8c7cf4ec43e017172a8a70e16c00b80",
"patch": "/tmp/erri-base-review-0558/fix.patch",
"patch_sha256": "692af3fbb9e3ea121cb53e7d9739be1a278215e8c89bfa501730d183bc9ff2d9",
"delta": "Exactly current groupUtility lookup plus missing/disallowed refusal in Owned after player/logistics guards. Existing Begin/Tick/arming call paths apply it without additional changes.",
"remaining_blockers": [],
"testing": "Separate testauthor owns actual-method red/green. No compiler/native test by reviewer."
}
}