Migration notes
What an operator changes when a release breaks something: one section per such release, newest first, headed by the bare version (## 1.14.0). After the public launch a breaking change is a major — a title with ! after its type — and the title check refuses such a PR until the section for the release it will cut exists; the first breaking PR of a cycle creates it, each later one adds its lines (the rule). Until the launch the 1.x line moves by minors, the next release is pinned in release-please-config.json, no title carries !, and a breaking cleanup writes its section under the pinned version. The changelog's ⚠ BREAKING CHANGES entry, when there is one, says what broke; the section here says what to do about it.
A section says, in this order: what no longer works as it did, what replaces it, and the smallest edit that gets an installation from one to the other — a config key to rename, a command to re-run, a secret to add. Nothing else: history and reasons live in the changelog and the decision records.
1.15.0
- Run records written before span schema 2 (no
schemafield, or a lower one) show no timing: the run page's Timeline readsno timing datawith no shape, and their stored friction diagnosis stands as written; the transcript, the call cards andruns get/runs eventsare unchanged. Nothing to edit — leave them, and they age out withrunHistory.retentionDays. Theturnandmcp_tool_useevent kinds are gone; a saved JSONL capture that carries them is analyzed byfriction analyzewith those lines skipped and counted, and its model time comes frommodel.turnspans only.
1.14.0
- A
config.yamltop-level key the document does not define —permissions:included — is an unknown key and fails the load by name; write who holds what asgrantsand what is closed asrestrict(authorization). - A token entry's
scopesinSWITCHBOARD_INGRESS_TOKENSis ignored like any field other thansubjectandchannel; the token holds exactly itsgrants.http:<subject>/grants.mcp:<subject>entry (Ingress tokens are credentials, not grants). - A
selfImprovementfield other thanrepo,label,minRuns,topfails the load by name; the friction ledger isrunHistory.