Original Powerplay activity counters
Offline original-client evidence is pinned to SHA256 6891f70a021fa9f3a0e00458c284f48d1226e68ae7fc02ad48081aed47857e93 (artifacts/ship-model-reference/client-copy/EliteDangerous64.exe). Decompilations and complete assembly are under artifacts/galaxy-query-research/power-activities/. Runtime guards use the shared ED5A profile; its three Power service vtables are the existing verified PowerOptions reader's values. No original function is invoked by the new counter reader.
Meaning of the result
Original 3B27100 only applies the minimum counter test when activity is enabled at object +1A0 and its minimum switch +198 is true. The selected action is +194, selected definition index is +188, and threshold is +190. This is a recent activity counter filter, not an independent participation eligibility predicate. With its minimum switch off, a zero counter does not hide a system.
3B1CFA0 selects the original counter getter. Original action IDs are 1 Undermining, 2 Reinforcing, 3 Acquiring, 4 Being Undermined, and 5 Total. Its selected power parameter is a definition index; the adapter accepts a real internal ID and resolves that ID through the actual original definition table. UI list IDs, definition indexes, and internal IDs are separate.
Pure copied layouts and branches
The registered service is identified by global type ID 5F3C524, interface at manager +58, original owner at manager +10. The original options source proves service flags +308/+309, count +330 and definition vector +338 (stride 260). Metadata readiness additionally uses +30A; the original counter rebuild 140CE20 clears processing flag service +30C after both counter maps and totals are settled. The reader requires ready flags and processing=false throughout.
Metadata map service +3C0 is the exact bitmap/open-address layout in 140E850: count +8, capacity +10, backing +18, 16-byte bitmap alignment, row stride 180. The row key is the 64-bit system address, and the value starts at row +10. Metadata contains owner definition index at value +0, state at +C, and total float at +124.
Unoccupied counters service +3218 use original 644BD0: bitmap alignment 8, stride 10, address key +0, float +8. Controlled counters service +3240 use 140E690: bitmap alignment 8, stride 18, address +0, mode uint +8, tuple at +10 whose float is +14. Pair hashing uses the original 64-bit address hash XOR the rotate16 of the original uint mode hash. All table traversal is bounded, and changed/malformed tables remain unknown.
The exact original branches are:
- Action 5 returns metadata total
+124, independently of selected power. - Metadata state 0 uses the unoccupied counter for every action 1–4 and either scope.
- A controlled system in selected scope uses mode 0 iff
(ownerIndex == selectedIndex) == (action != 4), otherwise mode 1 (1412900). - A controlled system in All scope uses mode 0 for action 2 and mode 1 for actions 1, 3, 4 (
14121E0). - A valid ready metadata row and absent counter entry produce original getter zero (
1412900,14121E0,1412A90). Absent metadata remains null: the adapter deliberately does not substitute the game's default fallback record.
Original metadata getter 1414100 writes last-key/cache pointers at +668/+670; it is not called. This port reads the published table instead. It never requests backend data, sends gameplay actions, or modifies counters.
Queue and wire
Navigation.GalaxyFilterFactsQueue.cs accepts optional includePowerActivity (default false). Enabled requests require powerScope=selected|all, powerActivityId=1..5; selected requires a nonnegative actual powerInternalId, while all has no individual ID. Invalid or mixed disabled parameters are rejected before enqueueing. The pipe thread only operates on managed request/result state.
Each owning-thread batch creates one source context bound to thread, image, player entity and current system. Known IDs come exclusively from copied native compact records. Each row echoes {scope, internalPowerId, actionId, recentActivity} even when the counter is unknown. No Eligible field exists. Cancellation, deadline and context changes use the existing facts generation rules.
Exports XFENavigationGalaxyPowerActivitySelfTest and XFENavigationGalaxyPowerActivityWireSelfTest each expect mask 255. The isolated production-source fixture passed all ten groups, including selected/All counter branches, total independent of scope, zero versus unknown, source readiness, malformed/changed data guards, no writes, strict request validation, null binding, cancellation and context change. These are offline layout/wire checks; no current-game live verification has occurred.