Add guarded promoted YOLO activation
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-07-11 10:45:06 +02:00
parent 340be960e9
commit b1a4074cc8
13 changed files with 550 additions and 23 deletions
+41
View File
@@ -6532,3 +6532,44 @@ Open:
## Next recommended pass
- Add a guarded model activation/operator-selection workflow that can mark a promoted candidate as active only after the report artifact and candidate key are explicitly supplied.
# Sprint 163 - Guarded promoted YOLO activation workflow
## What changed
- Added `scripts/activate_promoted_yolo_candidate.py`.
- The helper validates:
- the promotion report file exists and is valid JSON;
- the exact supplied `candidate_key` matches the report recommended candidate;
- the candidate has `promotion_status=promote_candidate`;
- positive sample count, background sample count, mean F1 and max background detections still satisfy report gates;
- the candidate `model_asset_id` resolves to an existing local model file under the mounted models directory.
- The helper emits `.env` updates in dry-run mode by default and writes them only when `--apply` is supplied.
- Updated Detection Lab operator profiles:
- `balanced-review` at threshold `0.15` remains candidate-only because pure-empty false-positive pressure failed.
- `conservative-review` at threshold `0.35` is marked as promoted/default-approved based on the split-background pure-empty gate.
- Added docs for the guarded activation command in `docs/AI_PIPELINES.md`, `scripts/README.md`, `backend/README.md` and `frontend/README.md`.
- Added readiness coverage for compiling the new helper.
- No API contract, database migration, provider fetching, fake detection path, model file mutation, model download or automatic runtime activation was introduced in code.
## What was tested locally
- RED: `python -m pytest tests/test_sprint162_promoted_model_activation.py -q` failed while `scripts/activate_promoted_yolo_candidate.py` was absent.
- RED: `python -m pytest tests/test_sprint155_detection_operator_profiles.py -q` failed before `conservative-review` was marked promoted.
- RED: `python -m pytest tests/test_sprint162_promoted_model_activation.py::test_readiness_gate_compiles_promoted_activation_script -q` failed before readiness compiled the helper.
- Ran `python -m pytest tests/test_sprint162_promoted_model_activation.py tests/test_sprint155_detection_operator_profiles.py -q`: 7 passed.
- Ran `python -m py_compile scripts/activate_promoted_yolo_candidate.py`.
- Ran `python -m compileall backend/app`.
- Ran `python -m pytest` in `backend`: 454 passed, 17 existing Pydantic protected-namespace warnings.
- Ran `npm run typecheck` in `frontend`.
- Ran `npm run build` in `frontend`.
- Ran `bash scripts/run_readiness_check.sh`: passed.
## Known limitations
- The helper updates runtime environment only; a container restart or rebuild is still required for `YOLO_MODEL_PATH` changes to take effect.
- The promoted threshold is represented in the operator profile and promotion report. The backend detection endpoint still requires clients to submit the intended confidence threshold explicitly.
## Next recommended pass
- Push this helper to Tower, run it first as dry-run against the high-threshold promotion report, then apply and redeploy/restart only if the emitted `YOLO_MODEL_PATH` matches the promoted local asset.