{
  "title": "The Behavioral Contract",
  "slug": "behavioral-contract",
  "state": "active",
  "description": "Notes on what a behavioral contract is, why it lives between the test and the API, and what changes about your suite when you start writing one explicitly.",
  "plannedParts": 6,
  "parts": [
    {
      "number": 1,
      "title": "Why the test runner is not the contract",
      "slug": "test-runner-not-contract",
      "state": "shipped"
    },
    {
      "number": 2,
      "title": "Promises, not assertions",
      "slug": "promises-not-assertions",
      "state": "shipped"
    },
    {
      "number": 3,
      "title": "The shape of a contract you can ship",
      "slug": "shape-of-a-contract",
      "state": "shipped"
    },
    {
      "number": 4,
      "title": "What the contract owes the implementation",
      "slug": "contract-owes-implementation",
      "state": "shipped"
    },
    {
      "number": 5,
      "title": "Versioning a contract that lives in code",
      "slug": "versioning-contracts",
      "state": "shipped"
    },
    {
      "number": 6,
      "title": "Refusing to accept silent regressions",
      "state": "now"
    }
  ]
}
