Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
52 lines
4.0 KiB
JSON
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."
|
|
}
|
|
}
|