ContractSpec docs

OSS-first docs

These docs teach the open system first: contracts, generated surfaces, runtimes, governance, and incremental adoption. Studio shows up as the operating layer on top, not as the source of truth.

GraphFilterSpec — persistent graph filter contract

Two-tier persistent filter: named fields (kinds/statuses/owners/timeRange) + open fields (facets/predicates). URL-serialisable via graph-filter-codec (M3 P4/W4.1).

field.key.label
GraphFilterSpec — persistent graph filter contract
field.version.label
field.type.label
field.title.label
GraphFilterSpec — persistent graph filter contract
field.description.label

Two-tier persistent filter: named fields (kinds/statuses/owners/timeRange) + open fields (facets/predicates). URL-serialisable via graph-filter-codec (M3 P4/W4.1).

field.tags.label
graph,filter,contract,url,facet,predicate,m3
field.owners.label
field.stability.label
public

`GraphFilterSpec` lives at `DataViewGraphSpec.source.where`. All fields optional — `{}` = no filter.

| Field | Type | Tier | | --- | --- | --- | | `kinds` | `string[]` | 1 | | `statuses` | `string[]` | 1 | | `owners` | `string[]` | 1 | | `timeRange` | `GraphTimeRangeFilter` | 1 | | `facets` | `GraphFacetFilter[]` | 2 | | `predicates` | `GraphFilterPredicate[]` | 2 |

URL codec: `encodeFilterToUrl(spec)` → `URLSearchParams`; `decodeFilterFromUrl(params)` → `GraphFilterSpec | null`.