Capture current mission, AI, map and administration development

Include the current addon, terrain integrations, tools, regression tests and recorded development evidence.
This commit is contained in:
2026-10-13 22:52:53 +02:00
parent a951a96edc
commit 6a667d8deb
8104 changed files with 2124945 additions and 2061 deletions
@@ -0,0 +1,12 @@
check: /tmp/err-policy-ioye7098/check.cpp:330: int main(): Assertion `s->Complete&&s->Valid()&&s->Weapons==1&&s->Muzzles==1&&s->Magazines==1&&s->Rounds==25&&s->Capacity==100&&s->Chambers==1&&inert.reads==1' failed.
Traceback (most recent call last):
File "/tmp/erri-bmp-ammo-1305/tests/test_hq_mounted_ammo_sampler.py", line 256, in <module>
run(program)
~~~^^^^^^^^^
File "/home/jakub/devel/escapistsrereintroduced/tests/policy_harness.py", line 14, in run
subprocess.run([str(p/'check')],check=True)
~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/tmp/err-policy-ioye7098/check']' died with <Signals.SIGABRT: 6>.
@@ -0,0 +1,32 @@
{
"complete": true,
"implementation_proposed": true,
"compiled_or_executed": false,
"finding": "Two installed non-firing weapon entities are incorrectly treated as unsupported armed weapons, forcing mounted ammunition completeness false. Gunner has3 real weapon templates plus Armament_Empty; commander has periscope dummy. Exact resource definitions and inheritance contain no MuzzleComponent. Existing sampler rejects every zero-muzzle weapon, matching retained5weapon/3muzzle native symptom. This is source-backed attribution, not a new runtime trace.",
"source_change": "Inspect retains ordinary collection and native muzzle read. Only empty-muzzle entries of two exact known resources can be omitted; helper independently proves owner in allowed hierarchy and exact reciprocal InventoryItem parent slot / WeaponSlot owner+binding+mounted entity. Subtract only that non-firing entry from Weapons. Unknown or broken identity remains incomplete. Known resource with actual muzzles remains ordinary sampled weapon, not silently excluded.",
"caps_and_behavior": "No new traversal, world/player read, mutation, spawn, ammo refill, radio bypass or changed completeness requirement. Existing hierarchy/weapon/muzzle/cargo caps and all actual live-gun counts remain. Metadata/slot reads only on empty-muzzle branch. Detached Watch behavior unchanged.",
"installed_evidence": {
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Base.et": "2fc39d7c2fc4bebe027efa5607ea71dd7dd0021daffb43f65332bf2698a52a4b",
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/Commander/BMP1_Commander_Turret.et": "5dfd5bfa80cb08037fde682e468e44834126f4d4976a15b9d0db3544385798d0",
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Weapons/Core/Armament_Empty.et": "73b35bd524e30fe09f147f0dc5f197d49c341b46c660ec1ce402f143dc943731",
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et": "fb4b80333f53ab8e4bf4a17453f90eab9d3774363c5bbbf511873939f83bc40b",
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Weapons/Core/Weapon_Base.et": "0858b2ab1d781d31c7af600eef5463d112709e65466c602e4913496cd79c63b3",
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Weapons/Cannons/2A28/Cannon_2A28_Base.et": "485c21599fa9e0a9d85ebbb5585519144eb1c9a5b1f640998f66e55719d225ab",
"/tmp/erri-bmp-ammo-1305/installed/Prefabs/Weapons/Cannons/2A28/Cannon_2A28_HE.et": "be43f07fc0ce80dc1e65a91b8230f83ef1309d69538b2e3788d1c7438c8affd7"
},
"unsupported": [
"Unknown zero-muzzle components remain incomplete.",
"Projectile-only or unloaded real muzzles without magazine remain incomplete; no assumption empty means zero ammunition.",
"Modified/inherited derivative prefab identities are not allowlisted automatically.",
"Malformed foreign/detached installation or missing reciprocal slots cannot use exclusion.",
"No current native BMP mounted-completeness claim until normal/native observation confirms actual components and remaining topology."
],
"tests": "Existing test_hq_mounted_ammo_sampler.py actual whole-source translation extended. New first case should compile baseline then fail Complete on exact inert dummy; proposal should pass. Both default and WORKBENCH existing runs remain. Pair-specific placeholder/resource/native inventory doubles; no test run or compiler permitted in this continuation. Root requested standalone-only unarmed dummy and simultaneous two-dummy+real-gun cases added; all remain unexecuted.",
"source_manifest": "/tmp/erri-bmp-ammo-1305/source-manifest.json",
"patch_sha256": "306d528469aa138e2d8492bc43cd62b977dc895350b4c561fe6c3b400141c8b0",
"review_pending": "Independent hq_memory_review source/test review requested; root owns later focused executable validation and native qualification.",
"index_before": {
"addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedAmmoSampler.c": "88ea0fc0e13d7e3c22c7ce8b652816d1d137e4e6e37a72f48f0bdf515b936ae7",
"tests/test_hq_mounted_ammo_sampler.py": "b1c630909e5227d0f7bd0d69d7927403fcb0f33e7297d5fa52f96001720f8442"
}
}
@@ -0,0 +1,122 @@
--- a/addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedAmmoSampler.c
+++ b/addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedAmmoSampler.c
@@ -239,6 +239,23 @@
if (mounted) AddWeapon(mounted, allowed, weapons, result);
}
}
+ // These installed resources are inert selection/periscope controls, not guns.
+ // Only omit them after the caller observed an empty native muzzle list and
+ // reciprocal current weapon-slot ownership in this same sampled hierarchy.
+ protected static bool NonFiringPlaceholder(BaseWeaponComponent weapon, array<IEntity> allowed)
+ {
+ if (!weapon || !weapon.GetOwner()) return false;
+ IEntity owner = weapon.GetOwner();
+ if (!allowed.Contains(owner) || !owner.GetPrefabData()) return false;
+ ResourceName resource = owner.GetPrefabData().GetPrefabName();
+ if (resource != "{52120E4BA120661B}Prefabs/Weapons/Core/Armament_Empty.et"
+ && resource != "{7E1DD1CE4D6A23F4}Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et") return false;
+ InventoryItemComponent item = InventoryItemComponent.Cast(owner.FindComponent(InventoryItemComponent));
+ if (!item || !item.GetParentSlot()) return false;
+ InventoryStorageSlot slot = item.GetParentSlot();
+ WeaponSlotComponent mount = WeaponSlotComponent.Cast(slot.GetParentContainer());
+ return mount && allowed.Contains(mount.GetOwner()) && mount.GetSlotInfo() == slot && mount.GetWeaponEntity() == owner;
+ }
static ERR_HQMountedAmmoSnapshot Inspect(IEntity root)
{
ERR_HQMountedAmmoSnapshot result = new ERR_HQMountedAmmoSnapshot();
@@ -252,7 +269,13 @@
foreach (BaseWeaponComponent weapon : weapons)
{
array<BaseMuzzleComponent> muzzles = {}; weapon.GetMuzzlesList(muzzles);
- if (muzzles.IsEmpty() || muzzles.Count() > 8) { result.Complete = false; continue; }
+ if (muzzles.IsEmpty())
+ {
+ if (NonFiringPlaceholder(weapon, allowed)) result.Weapons--;
+ else result.Complete = false;
+ continue;
+ }
+ if (muzzles.Count() > 8) { result.Complete = false; continue; }
foreach (BaseMuzzleComponent muzzle : muzzles)
{
if (!muzzle || !muzzle.GetOwner() || !allowed.Contains(muzzle.GetOwner())) { result.Complete = false; continue; }
--- a/tests/test_hq_mounted_ammo_sampler.py
+++ b/tests/test_hq_mounted_ammo_sampler.py
@@ -13,6 +13,7 @@
code=code.replace('InventoryItemComponent.Cast(mountedEntity.FindComponent(InventoryItemComponent))','mountedEntity->item')
code=code.replace('WeaponSlotComponent.Cast(weapon)','dynamic_cast<Mount*>(weapon)').replace('binding.GetParentContainer()','binding->mount')
code=code.replace('InventoryItemComponent.Cast(entity.FindComponent(InventoryItemComponent))','entity->item')
+code=code.replace('InventoryItemComponent.Cast(owner.FindComponent(InventoryItemComponent))','owner->item').replace('ResourceName resource', 'string resource')
code=code.replace('WeaponSlotComponent.Cast(slot.GetParentContainer())','slot->mount').replace('BaseMuzzleComponent.Cast(slot.GetParentContainer())','slot->muzzle')
code=code.replace('EStoragePurpose.','EStoragePurpose::').replace('GetParentSlot().','GetParentSlot()->')
code=code.replace('ChimeraCharacter.Cast(entity) != nullptr','entity->character').replace('ChimeraCharacter.Cast(entity) != null','entity->character')
@@ -24,7 +25,7 @@
code=code.replace('array<','Array<').replace('foreach (','for (').replace('null','nullptr')
code=code.replace('Array<IEntity> allowed, Array<BaseWeaponComponent> weapons,','Array<IEntity>& allowed, Array<BaseWeaponComponent>& weapons,')
code=code.replace('Array<IEntity> allowed, Array<BaseWeaponComponent> weapons)', 'Array<IEntity>& allowed, Array<BaseWeaponComponent>& weapons)')
-for name in ('copy','result','weapon','root','entity','child','part','manager','mounted','muzzle','magazine','item','storage','mount','mountedEntity','mountedItem'):
+for name in ('copy','result','weapon','root','entity','child','part','manager','mounted','muzzle','magazine','item','storage','mount','mountedEntity','mountedItem','owner'):
code=re.sub(r'\b'+name+r'\.',name+'->',code)
code=re.sub(r'\b(bool|int) (\w+);',r'\1 \2=0;',code).replace('\n}\n','\n};\n')
program=(r'''
@@ -69,6 +70,37 @@
ERR_HQMountedAmmoSnapshot* Inspect(){return ERR_HQMountedAmmoSampler::Inspect(&root);}
};
int main(){
+ // Installed BMP has three live gun components plus two inert native controls.
+ // Exercise actual Inspect using exact documented resources and reciprocal slots.
+ for(string name:{string("{52120E4BA120661B}Prefabs/Weapons/Core/Armament_Empty.et"),string("{7E1DD1CE4D6A23F4}Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et")}){
+ Rig r;Entity dummy;Weapon inert;Mount mount;Item item;Slot slot;dummy.prefab.name=name;
+ r.crew.sibling=&dummy;dummy.weapon=&inert;inert.owner=&dummy;dummy.item=&item;item.slot=&slot;slot.mount=&mount;mount.owner=&r.root;mount.slot=&slot;mount.weapon=&dummy;
+ r.manager.weapons.Insert(&mount);r.manager.weapons.Insert(&inert);
+ auto s=r.Inspect();assert(s->Complete&&s->Valid()&&s->Weapons==1&&s->Muzzles==1&&s->Magazines==1&&s->Rounds==25&&s->Capacity==100&&s->Chambers==1&&inert.reads==1);
+ }
+ // A root containing only a known installed inert control is completely unarmed.
+ {Entity root,dummy;Weapon inert;Mount mount;Item item;Slot slot;root.child=&dummy;dummy.prefab.name="{7E1DD1CE4D6A23F4}Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et";dummy.weapon=&inert;inert.owner=&dummy;dummy.item=&item;item.slot=&slot;slot.mount=&mount;mount.owner=&root;mount.slot=&slot;mount.weapon=&dummy;auto s=ERR_HQMountedAmmoSampler::Inspect(&root);assert(s->Complete&&s->Valid()&&s->Weapons==0&&s->Muzzles==0&&s->Magazines==0&&s->Rounds==0&&s->Capacity==0&&s->Chambers==0&&inert.reads==1);}
+ // Both BMP controls coexist: decrement each exactly once while retaining the gun.
+ {Rig r;Entity dummy[2];Weapon inert[2];Mount mount[2];Item item[2];Slot slot[2];r.crew.sibling=&dummy[0];dummy[0].sibling=&dummy[1];
+ dummy[0].prefab.name="{52120E4BA120661B}Prefabs/Weapons/Core/Armament_Empty.et";dummy[1].prefab.name="{7E1DD1CE4D6A23F4}Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et";
+ for(int i=0;i<2;i++){dummy[i].weapon=&inert[i];inert[i].owner=&dummy[i];dummy[i].item=&item[i];item[i].slot=&slot[i];slot[i].mount=&mount[i];mount[i].owner=&r.root;mount[i].slot=&slot[i];mount[i].weapon=&dummy[i];r.manager.weapons.Insert(&mount[i]);r.manager.weapons.Insert(&inert[i]);}
+ auto s=r.Inspect();assert(s->Complete&&s->Valid()&&s->Weapons==1&&s->Muzzles==1&&s->Magazines==1&&s->Rounds==25&&s->Capacity==100&&s->Chambers==1&&inert[0].reads==1&&inert[1].reads==1);}
+ // Unknown no-muzzle weapons and broken/foreign installation remain incomplete.
+ for(int bad=0;bad<6;bad++){
+ Rig r;Entity dummy,foreign;Weapon inert;Mount mount;Item item;Slot slot,other;dummy.prefab.name="{52120E4BA120661B}Prefabs/Weapons/Core/Armament_Empty.et";
+ r.crew.sibling=&dummy;dummy.weapon=&inert;inert.owner=&dummy;dummy.item=&item;item.slot=&slot;slot.mount=&mount;mount.owner=&r.root;mount.slot=&slot;mount.weapon=&dummy;
+ if(bad==0)dummy.prefab.name="{0000000000000000}Prefabs/Weapons/Core/Armament_Empty.et";
+ if(bad==1)dummy.item=nullptr;
+ if(bad==2)item.slot=nullptr;
+ if(bad==3)mount.owner=&foreign;
+ if(bad==4)mount.slot=&other;
+ if(bad==5)mount.weapon=&foreign;
+ auto s=r.Inspect();assert(!s->Complete&&s->Valid());
+ }
+ // A known resource carrying an actual muzzle is never silently omitted.
+ {Rig r;r.gun.prefab.name="{52120E4BA120661B}Prefabs/Weapons/Core/Armament_Empty.et";auto s=r.Inspect();assert(s->Complete&&s->Weapons==1&&s->Rounds==25&&r.muzzle.reads==1);}
+ // An excluded cargo subtree cannot turn a stored placeholder into mounted armament.
+ {Rig r;Entity cargo;Weapon inert;Item item;Slot slot;Storage storage;r.crew.sibling=&cargo;cargo.prefab.name="{52120E4BA120661B}Prefabs/Weapons/Core/Armament_Empty.et";cargo.item=&item;item.slot=&slot;slot.storage=&storage;cargo.weapon=&inert;inert.owner=&cargo;auto s=r.Inspect();assert(s->Complete&&s->Weapons==1&&inert.reads==0);}
{auto s=ERR_HQMountedAmmoSampler::Inspect(nullptr);assert(!s->Complete&&s->Valid());}
{Entity root;root.character=true;auto s=ERR_HQMountedAmmoSampler::Inspect(&root);assert(!s->Complete&&root.reads==0);}
{Entity root;auto s=ERR_HQMountedAmmoSampler::Inspect(&root);assert(s->Complete&&s->Valid()&&s->Weapons==0);}
--- a/docs/external-addons.json
+++ b/docs/external-addons.json
@@ -170,6 +170,11 @@
"guid": "0FA8ACE19A772327",
"addon": "595F2BF2F44836FB",
"verification": "Exact path/type/GUID verified in installed owning resourceDatabase.rdb, 2026-09-26. Response roles and medic stock inspected in RHS character/group prefabs."
+ },
+ "Prefabs/Weapons/Core/Armament_Empty.et": {
+ "guid": "52120E4BA120661B",
+ "addon": "629B2BA37EFFD577",
+ "verification": "Exact path/type/GUID record in installed owning resourceDatabase.rdb; read-only audit 2026-10-03"
}
}
}
--- a/docs/vanilla-resources.json
+++ b/docs/vanilla-resources.json
@@ -125,6 +125,7 @@
"Prefabs/Weapons/Attachments/Optics/Optic_4x20/Optic_4x20.et": "BD496EE1B40DC510",
"Prefabs/Weapons/Attachments/Optics/Optic_ARTII/Optic_ARTII.et": "D2018EDB1BBF4C88",
"Prefabs/Weapons/Attachments/Optics/Optic_PSO1/Optic_PSO1.et": "C850A33226B8F9C1",
+ "Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et": "7E1DD1CE4D6A23F4",
"Prefabs/Weapons/Explosives/Mine_PMN4/Mine_PMN4.et": "B05A816C0BF50802",
"Prefabs/Weapons/Handguns/PM/Handgun_PM.et": "C0F7DD85A86B2900",
"Prefabs/Weapons/Magazines/Magazine_545x39_AK_30rnd_Ball.et": "BBB50A815A2F916B",
@@ -0,0 +1,10 @@
{
"baseline": {
"exit": 1,
"log": "/tmp/erri-bmp-ammo-1305/baseline-test.log"
},
"proposed": {
"exit": 0,
"log": "/tmp/erri-bmp-ammo-1305/proposed-test.log"
}
}
@@ -0,0 +1,47 @@
{
"archive": "/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons/BMP-1IFV_5E524E4FEECCA92B/data.pak",
"selected": {
"Prefabs/Vehicles/Tracked/BMP1/BMP1P_Base.et": "dae88dfbfdeda054251051b7cc8d0820e76e9b81be7c031233c808ff46ddbbe7",
"Prefabs/Vehicles/Tracked/BMP1/BMP1P_Desert.et": "513b859692939d1363a6c0049b7c9f501f1eab56f384b0141a6a945921fe3b3d",
"Prefabs/Vehicles/Tracked/BMP1/BMP1P_FIA.et": "b31129fc2c572135e198974904028d0f4d14c44a89034af20db1e37dd14603f8",
"Prefabs/Vehicles/Tracked/BMP1/BMP1P_FIA_Desert.et": "bfdb4ab80cbaad8d9def7d5be05a1db45ddc456e282836eaef555474bc8b252a",
"Prefabs/Vehicles/Tracked/BMP1/BMP1_Base.et": "cce344594a6c6c3691b3e99c9b7283bccbc0abda4553eb1af419521b99e90326",
"Prefabs/Vehicles/Tracked/BMP1/BMP1_Desert.et": "854beec91beeb330caf4d9cbb0b0ee24f00abcce4eb006aad863cf3e9678ab61",
"Prefabs/Vehicles/Tracked/BMP1/BMP1_FIA.et": "c8a4278c01d63b14eca9949de28ff7527432bb6d15c4f038d2851f6a59737d2a",
"Prefabs/Vehicles/Tracked/BMP1/BMP1_FIA_Desert.et": "43b6b6f741914405550c2f98bb44afcb0bc063e233e82a6c0218eaea034554f6",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/BMP1_Shadow.et": "3d6eb24febca61157e8edea71b5ce7da6167249df754dcbdb8e6ef4057697c5f",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret.et": "30dcb6d87ee2d4d4e7e518b4995e9403131fb80549131063738b00ae40c02911",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_Back.et": "0c6aca8b42b6b1cb5de0971412c57a8489e68c8a6a40fd0301d094f0443e938b",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_Back_Desert.et": "1d2d9baf28bb80ca1b52fc5a1c79f8e790a706f9f1c018f173b9e35c385447f9",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_Back_FIA.et": "f50dab946cdc35d61ee1c5a2ad88a55bb6fb7dee1edf4083750e1bb09f3a854b",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_Back_FIA_Desert.et": "5385cbea046037ab4cabecb51b05edf6d082e9d5b97101bdc3ee79caa004668b",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_Base.et": "662cf0f2592c3684969b0fdd4c35d0c02ed7b5fb47fd37647723bf660b622dc7",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_Desert.et": "a39fb019455e7c7a0ed17618f09d08b754c8999905b36898feb7d33de89d77ff",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_FIA.et": "d744e8313a8dbb1c08f4767707ec22a4718ae9cf4bd0246e8bbaa722c29bfb72",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1P_Turret_FIA_Desert.et": "af71500949a2b3b6d2d8fc195b7441db308ddd63b931a4176063e068ea52ff45",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret.et": "1897ad1a554f4027386a4b1d0f907e0d862204ff985fa37081686e3da26530d6",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Back.et": "426d48a25b52cc950a9c6a36d46a7f2105cee5b17880f8332d48996e8bf57006",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Back_Desert.et": "878a51e581b263deb1783393fb185f24a73e3c295f707477204ff2400c1dc4bb",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Back_FIA.et": "8a766c6da7d16f844b5c47cf21b8c1ce462ba451b3e41232793ed0f98b5422ef",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Back_FIA_Desert.et": "c3480abced07552f14289f9f7e3b5efa0be5493e12f23f81cb65050a18958581",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Base.et": "2fc39d7c2fc4bebe027efa5607ea71dd7dd0021daffb43f65332bf2698a52a4b",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_Desert.et": "3afe891762973d6bf9b4d7c327e3de535eac22b8436782c590ba9c534813215e",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_FIA.et": "058416be9ec5b1d30641d3c26ca8c143819c94144f5ce49d73476c2e195270f3",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/BMP1_Turret_FIA_Desert.et": "71aeb9b9eaf053e6ad810374ff510d457249bd9cfd728408cd8e7d15f2f3eac8",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/Commander/BMP1_Commander_Turret.et": "5dfd5bfa80cb08037fde682e468e44834126f4d4976a15b9d0db3544385798d0",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/Commander/BMP1_Commander_Turret_Desert.et": "d4690848e9cec3c01aaa01e9d8622ec4c00464fd3fa022b4e37570027a276989",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/Commander/BMP1_Commander_Turret_FIA.et": "13b56034333e1e7b00124dc364768d2119807886168ff0cca92a6ca7af328725",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Turret/Commander/BMP1_Commander_Turret_FIA_Desert.et": "cc89d442ecdea0797d64621b8efdc8dc2737497c5a953b56b08d24382fd1c4fe",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/WCS_BMP1_Periscope.et": "07aec280fddb8d7dfd5fae68e0cffadcfcbdbd37d346b4c772fc7448f3336545",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Base.et": "3ddf5798c3c65114d8a09d7b09a2c4beaedcdef40cc1753934104464472fadf7",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Drive.et": "03c3fc6063e9e371fa397edf1dcf3152b82061c1c07a9303eeada29c3a41414c",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Drive_Desert.et": "e67ed33ab975238c9b11fcb091458c61d477b1670751097d5866a85105b4edaa",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Idler.et": "d9061e273c16bf5d03727a80b861be9cb9e4dc0033cfcfd3543d663ba5ddbf3e",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Idler_Desert.et": "2e8d35793ed44884eb2fc31517feb1c8354f4b060be8678a4e8ae9480c520885",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Return.et": "c826571dc9e72fbc9755113f5f13197ff5479d749cae8e65c5d59a8d50a7e2fb",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Return_Desert.et": "0627f74d38c1631de7b2fad60760380c2c7532f37465a7f463c27df3c05c4776",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Road.et": "50e229ed8fa5219ef948d79a6138836e7ab640fef824b1b1498fc57b1e3bcc52",
"Prefabs/Vehicles/Tracked/BMP1/VehParts/Wheels/VehPart_BMP1_Wheel_Road_Desert.et": "f8b393483668ad93a2b2c1469404ac5341583adf542fa8ffefe1075a2ce6b11c",
"Scripts/Game/Weapon/WCS_BMP1_MagazineWell.c": "823c95a5ff8efd21c74d83bce880178ff77a2628f6e0de6471e65ca450066a7f"
}
}
@@ -0,0 +1,2 @@
PASS: actual mounted hierarchy sampling, ownership exclusion, deduplication, completeness/caps, quarter threshold and detached validation; no runtime policy or ammunition mutation
PASS: WORKBENCH opt-in diagnostics distinguish cycles/cap/storage/manager/mount failures without repeated native traversal
@@ -0,0 +1,27 @@
{
"complete": true,
"records": [
{
"database": "/home/jakub/.local/share/Steam/steamapps/compatdata/1874880/pfx/drive_c/users/steamuser/Documents/My Games/ArmaReforger/addons/WCS_Armaments_629B2BA37EFFD577/resourceDatabase.rdb",
"database_sha256": "7f38b7ed578b0b47864648a7b70288fe49dae4cc2556d5754377a1c28b2b6532",
"resource": "Prefabs/Weapons/Core/Armament_Empty.et",
"guid": "52120E4BA120661B",
"record_offset": 80834,
"exact_record_hex": "507265666162732f576561706f6e732f436f72652f41726d616d656e745f456d7074792e6574000600000000001b6620a14b0e1252",
"occurrences": 1
},
{
"database": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data/resourceDatabase.rdb",
"database_sha256": "c5344847875ab4c94cf3cda88c5f9cc60878b799f33b2137c8e4a18726c19b7c",
"resource": "Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et",
"guid": "7E1DD1CE4D6A23F4",
"record_offset": 7525042,
"exact_record_hex": "507265666162732f576561706f6e732f436f72652f56656869636c655065726973636f70655f44756d6d79576561706f6e5f426173652e657400060000000000f4236a4dced11d7e",
"occurrences": 1
}
],
"dependency_graph_unchanged": true,
"method": "Exact NUL-terminated resource path, six-byte resource type header and little-endian 64-bit GUID; exactly one occurrence, matching existing external_addons.py audit.",
"patch_sha256": "83f2c587c3e22393f5ad5479a04af13cb11439744961ba2bd860bffa977a4417",
"source_manifest_sha256": "58571821efb676ce70c07968656acc72bdbbe738b324e4be29dc98a18f1cdaad"
}
@@ -0,0 +1,5 @@
No commands executed below; root-only next validation when compiler/native serialization permits.
PYTHONPATH=/home/jakub/devel/escapistsrereintroduced/tests ERR_MOUNTED_AMMO_SOURCE=/tmp/erri-bmp-ammo-1305/baseline/addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedAmmoSampler.c python3 /tmp/erri-bmp-ammo-1305/tests/test_hq_mounted_ammo_sampler.py
PYTHONPATH=/home/jakub/devel/escapistsrereintroduced/tests ERR_MOUNTED_AMMO_SOURCE=/tmp/erri-bmp-ammo-1305/addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedAmmoSampler.c python3 /tmp/erri-bmp-ammo-1305/tests/test_hq_mounted_ammo_sampler.py
@@ -0,0 +1,18 @@
{
"addons/core/Scripts/Game/ERR/10_AI/ERR_HQMountedAmmoSampler.c": {
"before": "88ea0fc0e13d7e3c22c7ce8b652816d1d137e4e6e37a72f48f0bdf515b936ae7",
"proposed": "2f0db77ba999586e4290e440d112f1002da17ab5fd20bb4f5b7ff6df99f58a81"
},
"tests/test_hq_mounted_ammo_sampler.py": {
"before": "b1c630909e5227d0f7bd0d69d7927403fcb0f33e7297d5fa52f96001720f8442",
"proposed": "a4d098adcd3d1f1156d00cf0753268f286cd63640bdae5aed81828f74a8b4633"
},
"docs/external-addons.json": {
"before": "c340fe315efa9bad37ec9f249a259f51b833e66ea6f38bd774f1573753216ece",
"proposed": "47c644504a55074c781f0e004b2b086c01dda30748240c3e5cdeb90eb40be869"
},
"docs/vanilla-resources.json": {
"before": "d80edf67d429b578051cad1630d3c44fae70714d14a277e40294242f9b439783",
"proposed": "588192d151f382b612ca6ce9a564193b57d4a9e7ce9a3918bf8ad2f7e877d1f4"
}
}
@@ -0,0 +1,10 @@
{
"Prefabs/Weapons/Core/Turret_Base.et": {
"pak": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data/data007.pak",
"sha256": "aa8b82893e5eb357d173cb3c2320352254480de45f89b5c7f11d8c746e1d9cf2"
},
"Prefabs/Weapons/Core/VehiclePeriscope_DummyWeapon_Base.et": {
"pak": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data/data007.pak",
"sha256": "fb4b80333f53ab8e4bf4a17453f90eab9d3774363c5bbbf511873939f83bc40b"
}
}
@@ -0,0 +1,6 @@
{
"Prefabs/Weapons/Core/Weapon_Base.et": {
"pak": "/home/jakub/.local/share/Steam/steamapps/common/Arma Reforger/addons/data/data007.pak",
"sha256": "0858b2ab1d781d31c7af600eef5463d112709e65466c602e4913496cd79c63b3"
}
}