# 9. Breaking changes kielletty ## Päätös Providerin `v1`-tagin osoittamaa rajapintaa ei koskaan rikota. Consumerin `uses:`-kutsut säilyvät yhteensopivina — uusi versiotagi (`v2`, `v3`) luodaan VAIN jos taaksepäin yhteensopimaton muutos on pakottava. Käytännössä: `v1` on pysyvä, ja sitä ylläpidetään eteenpäin. ## Rajapinnan määritelmä Providerin rajapinta = `config-provider.yml` ja `check-version.yml` workflow_call-inputit ja -outputit: - Inputtien nimet, tyypit ja required-arvot eivät muutu - Outputtien nimet eivät katoa - Secret-nimet eivät muutu - Workflow-tiedoston nimi ja polku eivät muutu Sisäinen toteutus (scriptit, checkout-logiikka, build-vaiheet) voi muuttua vapaasti — consumer ei ole niistä riippuvainen. ## Versiotagin siirto Tagi `v1` siirretään automaattisesti uusimpaan onnistuneeseen main-commitin CI-ajoon (`tag-maintenance.yml`). Tagin nimi luetaan tiedostosta `CURRENT_PROVIDER_VERSION`. Jos breaking change joskus tulee pakottavaksi: 1. Päivitä `CURRENT_PROVIDER_VERSION` → `v2` 2. Luo uusi `v2`-tagi manuaalisesti (osoittaa uuteen rajapintaan) 3. `tag-maintenance.yml` alkaa ylläpitää `v2`:ta eteenpäin 4. `v1`-tagia **ei poisteta** — se jää osoittamaan viimeistä v1-yhteensopivaa committia. `v1`:tä käyttävät consumerit jatkavat toimintaansa ilman muutoksia. 5. Uudet consumerit ottavat käyttöön `@v2`:n. Aktiivisesti ylläpidetään vain yhtä tagia (`CURRENT_PROVIDER_VERSION`). Vanhat tagit säilyvät paikoillaan taaksepäin yhteensopivuutta varten. ## Perustelu Yhden aktiivisen tagin ylläpito on yksinkertaisempaa kuin usean rinnakkaisen version aktiivinen hallinta. Homelab-ympäristössä consumerit ovat saman ylläpitäjän hallinnassa — eri tiimien rinnakkaisia aktiiviversioita ei tarvita. Breaking changen sattuessa vanha tagi säilyy — vanhat consumerit eivät hajoa. Uusi tagi otetaan käyttöön uusissa consumereissa. Breaking changen kielto pakottaa suunnittelemaan rajapinnat huolellisesti etukäteen.