2.3 KiB
Next RE / implementation boundary
Framework is complete. First research-completion static pass is now captured and cross-checked. Do not reopen general workflow development as a prerequisite for this slice.
Recovered
- Original MSVCR100 scalar new/delete allocation family and import thunks.
- ObservedTech 0x2c record constructor, copy construction, vector append/growth and old-element destruction path. Its copy helper has three cdecl-style stack arguments.
- PlayerEvent 0x74 copy/append/destruction, with three independently owned strings. Its copy constructor uses ECX destination and one stack source argument instead.
- Callback order: observation -> matched-target roll/clear -> completion event -> tech effects/tail.
- Observed record uses internal tech key; completion event uses the display-name member.
- Name-not-found versus capacity-full are distinct branches. NPC/non-rebellion and
_Roottech predicates are part of observation eligibility._Rootcomparison is case-insensitive. - Ghidra's non-returning-delete annotation omits real cleanup. Raw instruction captures recover the post-free pointer clear and return; no shared database mutation was needed.
Smallest next work
Recover/cross-check the nested TurnEvents bucket constructor/growth and event duplicate/prune helpers (0x00885380, 0x00825d40, 0x00879eb0), including exceptional cleanup/ownership. Then build a narrowly scoped live-record adapter using the verified ABI contracts. First exercise short/long strings, spare/full capacity, and repeated-name/duplicate-event cases under a leased controlled workload before wiring it into complete research replacement.
An ABI bridge may use original-runtime allocation services as an explicitly declared dependency; that does not mean the original's RecordObservedTech or PostEvent game decisions may be counted as our replacement. Our code must own record contents, event IDs/order/dedup and callback effects. The original remaining turn driver is outside this scoped replacement. Full W1 original-vs-new acceptance still requires fresh controls and complete state comparison.
Evidence entry points: research-completion-abi.md, record-observation-crosscheck.md, research-callback-order.md and verify/results/{research-completion-abi,research-callback}/. Static recovery is not a claim of live allocator safety or a successful replacement.