diff --git a/docs/DEVELOPERS.md b/docs/DEVELOPERS.md index af7e41a..84f7294 100644 --- a/docs/DEVELOPERS.md +++ b/docs/DEVELOPERS.md @@ -514,7 +514,7 @@ The SDK is kept in sync with the Tango API and its own shape schemas via conform ### The contract -- **Source:** Generated by the [tango](https://github.com/makegov/tango) repo's `scripts/filter_shape_conformance.py` from the API runtime (FilterSets, ordering fields, shape specs). Since `schema_version: 2` it carries per-filter type metadata (`filter_params_detail`: value type, choices, filter class). +- **Source:** Generated by the [tango](https://github.com/makegov/tango) repo's `scripts/filter_shape_conformance.py` from the API runtime (FilterSets, ordering fields, shape specs). Since `schema_version: 2` it carries per-filter type metadata (`filter_params_detail`: value type, choices, filter class). The canonical spec — schema, value-type vocabulary, evolution rules, and the consumer pattern this SDK implements — lives in tango's [`contracts/README.md`](https://github.com/makegov/tango/blob/staging/contracts/README.md). - **Vendored copy:** `contracts/filter_shape_contract.json` pins exactly which API surface this SDK version conforms to. Refresh it with `uv run python scripts/refresh_contract.py` (reads the sibling `../tango` checkout, falling back to the GitHub API via `gh`). CI emits a staleness notice when the vendored copy drifts from tango HEAD. ### Filter conformance