Commits the gzipped 277-deal prod fixture (frozen _price_from_inputs inputs), the frozen backtest_baseline.json (overall MAPE 18.63% / bias -1.2%; per-segment бизнес -21.5% / элит -38.6% — the systemic expensive-segment underestimation, now measured), and a hermetic pytest gate that replays the fixture through the full pricing spine (ZERO DB) and asserts metrics == baseline within float tolerance. Relative regression gate, not an absolute SLA (live coverage ~55% is data-blocked per #1966). To change estimator behaviour: regenerate the baseline (--from-fixture --update-baseline, no DB) and justify the per-segment deltas in the PR. The fixture (gzipped prod inputs) re-extracts rarely; the per-change artifact is the 3 KB baseline. Large-file hook excludes the fixture (re-extracted only on ground-truth refresh). Refs #1966
51 lines
2.1 KiB
YAML
51 lines
2.1 KiB
YAML
# Local pre-commit hooks. Install once with:
|
||
# pip install pre-commit
|
||
# pre-commit install
|
||
#
|
||
# After install: every `git commit` runs these checks against staged files.
|
||
# Failures abort the commit.
|
||
|
||
repos:
|
||
# Generic hygiene
|
||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||
rev: v4.6.0
|
||
hooks:
|
||
- id: trailing-whitespace
|
||
- id: end-of-file-fixer
|
||
- id: check-yaml
|
||
exclude: ^backend/alembic/script.py.mako$
|
||
- id: check-toml
|
||
- id: check-added-large-files
|
||
args: ["--maxkb=512"]
|
||
# #1966: the frozen backtest regression-gate fixture is gzipped prod
|
||
# inputs (~3 MB). It is re-extracted rarely (only when ground-truth
|
||
# refreshes), so it does not bloat history per estimator change — the
|
||
# per-change artifact is the 3 KB backtest_baseline.json.
|
||
exclude: ^tradein-mvp/backend/tests/fixtures/backtest_full_fixture\.json\.gz$
|
||
- id: check-merge-conflict
|
||
- id: detect-private-key
|
||
|
||
# Python — ruff (lint + format) on backend/ + tradein-mvp/backend/
|
||
- repo: https://github.com/astral-sh/ruff-pre-commit
|
||
rev: v0.7.4
|
||
hooks:
|
||
- id: ruff
|
||
args: [--fix]
|
||
files: ^(backend|tradein-mvp/backend)/
|
||
- id: ruff-format
|
||
files: ^(backend|tradein-mvp/backend)/
|
||
|
||
# Frontend — prettier on TS/TSX/JSON.
|
||
# additional_dependencies pins the EXACT prettier engine (3.9.0) so this hook
|
||
# and CI (`openapi-codegen-check` → ./node_modules/.bin/prettier, also 3.9.0
|
||
# via frontend/package.json) format byte-for-byte identically. Без явного pin
|
||
# mirrors-prettier@v4.0.0-alpha.8 тянет CLI-обёртку, а CI `npx prettier`
|
||
# плавает в latest → расхождение формата → codegen-gate RED. Меняешь версию
|
||
# здесь — синхронно меняй prettier в frontend/package.json + lockfile.
|
||
- repo: https://github.com/pre-commit/mirrors-prettier
|
||
rev: v4.0.0-alpha.8
|
||
hooks:
|
||
- id: prettier
|
||
additional_dependencies: ["prettier@3.9.0"]
|
||
files: ^frontend/.*\.(ts|tsx|js|jsx|json|css|md)$
|
||
exclude: ^frontend/(node_modules|\.next|package-lock\.json)/
|