# Change Requests Lanes that believe a **frozen** file must change (`db.py` schema, `api.py` routes/shapes, `cli.py`, `config.py`, `synthetic.py`, `pyproject.toml`, the pose contract) do **not** edit it. Instead append an entry here and work around it locally; the integration agent adjudicates. **Format** (one entry per request, newest at the bottom): ``` ### CR- - **File:** - **Problem:** why the current contract blocks you - **Proposed change:** the minimal change you need - **Workaround in place:** what you did locally so you're not blocked - **Decision:** (integration fills this: applied | rejected — rationale) ``` --- ### CR-1 — lane D — 2026-07-16 — Update obsolete stub assertion in test_api.py - **File:** `backend/tests/test_api.py::test_detect_degrades_gracefully` - **Problem:** That foundation test asserted the *stub* contract of `POST /api/events/detect` (`"note" in data`), which was correct only while lane D was unimplemented. With M7 landed, `run_events` no longer raises `NotImplementedError`, so `api.py` returns the real `{result, events}` shape (spec M3) and the stub assertion fails. - **Proposed change:** rename to `test_detect_events_endpoint` and assert the real landed contract (200; `result` is the run_events summary with candidates/classified/… keys; `events` is a list; idempotent on repeat). - **Workaround in place:** applied the minimal edit directly (test file, not a frozen contract file). The frozen `api.py` app is **unchanged**. Only lane D's owned modules + this obsolete stub assertion were touched. Full suite green (89 passed). - **Decision:** (integration) — informational; the change is a direct, unavoidable consequence of lane D landing. Confirm the assertion matches the intended M3 detect-response shape.