- Choice: preserve existing
app/runtime layout to avoid regressions. - Why: project already has end-to-end behavior and domain logic coupled to templates/connectors.
- Tradeoff: full package migration is incremental rather than immediate.
- Choice: introduce
src/operational_leverage_framework(internal package name) with explicitcore/io/models/cli. - Why: provide a clean public API boundary for portfolio usage and offline demos.
- Tradeoff: temporary dual-path imports (
app/servicesand package wrappers).
- Choice: examples use local JSON evidence inputs and deterministic scoring.
- Why: reproducible outputs for reviewers without connector/API dependencies.
- Tradeoff: examples represent a narrow subset of full workflow complexity.
- Choice: enforce Ruff/pytest globally and mypy on typed boundary modules.
- Why: practical maintainability without blocking on complete typing of all legacy paths.
- Tradeoff: some deeper modules remain outside strict type coverage.
- Choice: use
python scripts/run.py webas the primary local entrypoint. - Why: one predictable cross-platform startup command for GitHub users.
- Tradeoff: launcher logic is centralized in a Python wrapper script.