The venv rebuild after a requirements.txt change was the largest cold-path
cost of `scripts/check_gate_stamp.sh full`. uv is also what CI installs
with, so the mirror gets closer to CI, not further. The interpreter is
passed as a path: `--python python3` let uv pick an active ~/.venv (3.13)
that crdt-sync 0.9.2 (>=3.14) cannot install into. pip stays as fallback.
Measured under capped.sh (4G, 20 %): `full` warm 10.9 s; fully cold
(no venv, empty PRE_COMMIT_HOME, empty mypy cache) 45.9 s, floor = the
pylint hook env install (~24 s, only after .pre-commit-config.yaml changes).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xfj1sxKH9VBPqpcAni8Jry
Mirrors the CI-green safeguards rolled out repo-wide (see screen-locker):
- scripts/check_requirements_sync.py: pre-commit hook that fails if a
package import isn't declared in requirements.txt. Added a kasa ->
python-kasa entry to the import->distribution map (python-kasa ships the
`kasa` import, already declared correctly in requirements.txt).
- scripts/ci_mirror.sh: pre-push gate = requirements.txt-only venv
(hash-gated) running `pre-commit run --all-files` + `pytest`, replacing
the plain pytest-coverage pre-push hook.
Verified: mirror green (210 passed). Only the tooling files are committed;
unrelated in-flight work in the tree is left untouched.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018PMRRVVkeRyrSaaqueMZKG