FINBOT STRATEGY MAPPING REPAIR

Immediate cause
The delivered replay_config.json set strategy_module:null. The adapter raises
HOST_STRATEGY_MODULE_NOT_CONFIGURED before attempting any module import. Merely
placing host_strategy.py or strategy.py alongside it does not set that field.
The installer preserves configuration, so reinstalling the bundle may preserve
that null value as well. This was an incomplete integration in the delivery.

Run on the Mac, without changing any directory paths in the source:
Extract this ZIP, then open Repair_Strategy.command. It resolves the project at:
  /Users/bpa/Desktop/ForesixaQuant/FinBot_Century_Gauntlet/
Alternatively run from the extracted repair folder:
  python3 -I repair_strategy_mapping.py
This is the repair execution script; it does NOT launch another supervisor.

What it does
- Reads the existing configuration; preserves every unrelated setting.
- Respects a configured strategy_file/module when valid. Otherwise searches
  host_strategy.py and strategy.py in the named project, then ForesixaQuant parent.
- Checks syntax, module callback declarations and compatible one-context
  signatures WITHOUT executing private strategy code or making broker calls.
- If two different compatible files exist, reports ambiguity instead of silently
  picking another strategy. If none exists, reports NO_STRATEGY_SOURCE_FOUND.
- Module callbacks must be decide(context) and capital_floor(context). A class
  containing similarly named instance methods is not the same interface.
  Missing implementation is reported, never replaced with fake HOLD/trading code.
- Writes strategy_mapping.json with the real file path/hash and creates the lazy
  finbot_strategy_entry.py binding module. Adapter imports that binding even when
  launched from another working directory. The actual strategy file stays intact.
- Sets replay_config.json strategy_module to finbot_strategy_entry and
  strategy_file to the selected actual source. Its digest remains the actual
  strategy source rather than the wrapper. Changed source requires repair/reload.
- Updates strategy_file in an EXISTING replay_isolation.json, preserving the
  image pin and other settings. It does not invent a container configuration.
  The hardened runner stages the selected real strategy as host_strategy.py.
- Backs up changed files under backups/strategy_mapping_<timestamp>/, writes
  files atomically and restores originals on a write error.
- Leaves all databases, attempt counters, data files, trading services and MFA
  configuration untouched. No credentials are requested or printed.

After repair
MAPPING_REPAIRED means only that mapping/configuration were repaired. Restart
ONLY the gauntlet supervisor using its EXISTING launch command and SAME --db.
Do not start a second loop or reset attempt179. Authentication flags and the
isolated runtime configuration remain required if that version is installed.
The script does not kill or recreate a process because its real host invocation,
private verifier identity and runtime installation cannot be safely guessed.

Version diagnosis
The hardened runner stages strategy_module:host_strategy inside its container.
Seeing the old null-mapping error may therefore mean an older supervisor/process
or another source installation is still active. strategy_mapping_report.json
includes hardened_runner_detected based on the source found; this is not proof
of which process is actually running. It reports restart_required after changes.
No security protection is disabled and no unisolated fallback is introduced.

Boundaries
The repair can bind an existing compatible real strategy. The prior packages
contained execution/risk machinery, not a complete autonomous strategy brain.
If the host has no compatible strategy source, this repair cannot create its
business logic or capital-ratchet definition from a filename. Source need not
be uploaded here; any incompatible callbacks must be adapted locally.
The delivered historical prices cover Jan1..Jan7,2020, not the requested1926
year. Repairing module configuration does not fabricate1926 crypto bars or
make the complete century replay ready. Any subsequent blocker must be reported
with its actual code. No successful full host simulation is claimed.

Evidence
9 repair tests passed. An additional integration check used the ORIGINAL adapter
and repaired configuration to import/call test-only strategy functions. It did
not execute your actual strategy or a full market replay. Tests verify preserved
settings/history, source non-execution during repair, filename alternatives,
parent-folder resolution, ambiguity, interface checks, existing isolation pin,
check-only behavior, repeated repair and rollback. Real Mac execution remains
unverified. --check performs discovery/validation without writing files.
