The B3 hook's unlock cascade was compare-mode only, so a replace run left the completed node unstamped and no tech unlocked -- and its only per-call counter was gated on the cascade, so a replace run had no instrument of its own saying a completion had happened at all. Lane CR needs both halves to ask whether ProcessResearch can be displaced. research.replace_cascade=on (default off, so the shipped behaviour is unchanged and still measurable) lets a replace-mode call write the four TechNode words SetResearched stamps and the tree's completion-order counter. The ServerPlayer half of the callback stays unmodelled and stays declared: no event is posted, no ObservedTech element is appended, no tech effect is applied. The pair of settings is the measurement -- same binary, one config line, and the leaf difference between the two autosaves is the cascade's own contribution. The per-call log line now prints in every mode and counts completions from the pass's own step results, so 'a completion fired' is a statement by the instrument rather than an inference from the artefact under test.
6 lines
431 B
Text
6 lines
431 B
Text
# Lane CR, the rule-19 control. Same proxy DLL as every measured CR run, same guest, same save,
|
|
# same click path -- `hooks=off` installs NOTHING (not even the M0 asm stub), so a difference
|
|
# between this run's autosaves and a measured run's is the instrument and nothing else.
|
|
# `# exhaustive` is deliberately absent: it is a claim about a `hooks=trace` hook set, and there
|
|
# is no hook set here to be exhaustive about.
|
|
hooks=off
|