Kompatibilitetspolitik¶
Fra version 1.0.0 og fremefter forpligter Turbo EA sig til dokumenteret bagudkompatibilitet inden for en major-versionslinje. Denne side er kontrakten: den beskriver, hvad der forbliver stabilt, hvad der kan ændre sig, og hvordan deprecations fungerer, så operatører kan planlægge opgraderinger uden overraskelser.
Politikken gælder for 1.x. En fremtidig 2.x-linje kan revidere den; hvis det er tilfældet, leveres en migrationsguide med 2.0.0-udgivelsesnoterne.
Hvad er dækket¶
Databaseskema (Alembic-migreringer)¶
Inden for 1.x:
- Migreringer er additive eller bagudkompatible-ved-opgradering.
- Nye kolonner kan tilføjes når som helst.
- Eksisterende kolonner vil ikke blive droppet uden at gennemgå en deprecation-cyklus.
- Eksisterende kolonner vil ikke blive omdøbt uden en deprecation-cyklus (en omdøbning implementeres som tilføj-ny-kolonne → backfill → deprecate-gammel-kolonne → drop-i-næste-major).
- Typeændringer er begrænset til udvidelse (f.eks.
varchar(80)→varchar(255)); indsnævrende ændringer gennemgår deprecation. - Foreign-key-constraints vil ikke blive strengere (f.eks.
ON DELETE SET NULLder bliverON DELETE CASCADE) uden en deprecation-cyklus.
Operatører kan rulle fremad med tillid; auto-migreringen ved backend-opstart er sikker at køre på produktionsdata.
Indbygget metamodel¶
Inden for 1.x er metamodellen, der leveres i backend/app/services/seed.py, stabil:
- Indbyggede korttype-nøgler (
Application,Initiative,BusinessCapabilityosv.) vil ikke blive omdøbt eller fjernet. - Indbyggede feltnøgler på disse typer vil ikke blive fjernet uden en deprecation-cyklus.
- Indbyggede relationstype-nøgler vil ikke blive omdøbt eller fjernet uden en deprecation-cyklus.
- Standardundertyper, der leveres med indbyggede typer, er stabile.
Operatørernes egne tilpasninger (brugerdefinerede korttyper, brugerdefinerede felter tilføjet via admin-UI, brugerdefinerede relationstyper) ejes af operatøren og er ikke dækket af denne politik.
REST API (/api/v1/)¶
Inden for 1.x:
- Endpoints under
/api/v1/vil ikke blive fjernet uden en deprecation-cyklus. - Eksisterende request- og response-feltnavne vil ikke blive omdøbt uden en deprecation-cyklus.
- Felttyper vil ikke ændre sig inkompatibelt (f.eks. string → array).
- Nye valgfrie request-felter og nye response-felter er ikke-brydende og kan lande i enhver minor.
- Nye endpoints er ikke-brydende og kan lande i enhver minor.
- Godkendelsessemantik (
BearerJWT,/auth/login-payload-formen) er stabil. - HTTP-statuskodesemantik er stabil for dokumenterede success- og fejlstier.
Adfærd ud over den dokumenterede overflade (udokumenterede headers, intern fejlmeddelelsestekst, rækkefølge når intet sort_by er angivet) er ikke dækket.
Tilladelsesnøgler¶
Tilladelsesnøgler defineret i backend/app/core/permissions.py er stabile inden for 1.x. Nye nøgler kan tilføjes; eksisterende nøgler vil ikke blive omdøbt eller fjernet uden en deprecation-cyklus.
Sættet af tilladelser, der gives som standard til de seedede roller (admin, bpm_admin, member, viewer), kan ændres mellem minor-udgivelser, med en CHANGELOG-bemærkning. Operatører, der har tilpasset rolletilladelser i deres udrulning, påvirkes ikke.
Konfiguration (miljøvariabler)¶
Eksisterende miljøvariabler dokumenteret i CLAUDE.md og README.md er stabile inden for 1.x. Nye variabler kan tilføjes med fornuftige standardværdier. Standardværdier kan ændres med en CHANGELOG-bemærkning, når ændringen er operatør-relevant (f.eks. en ny standardport).
Krypterede-i-hvile-hemmeligheder¶
enc:-præfiksmarkøren og Fernet-afledt nøgle i backend/app/core/encryption.py er stabile inden for 1.x. Operatører behøver ikke at re-kryptere hemmeligheder på tværs af minor-opgraderinger.
Deprecation-cyklus¶
Når noget dækket af denne politik skal fjernes:
- Markér som deprecated i minor
N. CHANGELOG-posten inkluderer enDeprecated-sektion, der fremhæver ændringen. For API-endpoints udsender den deprecated-rute enDeprecation: true-response-header (RFC 8594) og enSunset-header, der angiver det tidligst mulige fjernelsesmål. - Fortsæt med at understøtte i minor
N+1. Fjernelse kan ikke lande i samme minor som deprecation. Den deprecated-form bliver ved med at virke. - Tidligst fjernelse i minor
N+2eller i2.0(afhængigt af hvad der kommer først). Fjernelsen lander med enRemoved-sektion i CHANGELOG og en migrationsnote.
For dataformsændringer (Alembic-migreringer) gælder samme N → N+1-kadence, udtrykt som tilføj-ny → backfill → drop-gammel.
Hvad der ikke er dækket¶
Disse er eksplicit uden for omfanget og kan ændres når som helst:
- Det interne Python-modullayout under
backend/app/. Imports afapp.models,app.servicesosv. er ikke en del af den offentlige API. Plugins eller scripts, der afhænger af interne imports, bør fastlåse en specifik Turbo EA-version. - Strukturen af JSONB-blobs gemt i indbyggede tabeller (
fields_schema,section_config,attributes,lifecycle) ud over hvad der læses af den dokumenterede REST API. JSON-formen på disken kan udvikle sig for at understøtte nye funktioner. - Frontend-internaler: komponentfilstier, prop-signaturer af komponenter i
frontend/src/, indholdet affrontend/src/types/index.tsog styling af MUI-komponenter. Operatører, der bruger den medfølgende frontend, er isoleret; enhver, der indlejrer komponenter fra kildetræet, er på egen hånd. - Operatør-introducerede metamodel-tilpasninger. Hvis du tilføjer en brugerdefineret korttype eller felt via admin-UI'et, ejer du migrationshistorien, når du ændrer den.
- Demo- og seed-data (
SEED_DEMO=true). Demodatasættet må udvikle sig frit mellem udgivelser. - Medfølgende tredjepartstjenester: DrawIO-version, Ollama-medfølgende billede, den indlejrede swagger-ui-dist-version. Disse kan opgraderes når som helst.
- Adfærd med ikke-standard konfigurationer, der eksplicit er flaget som eksperimentelle i CHANGELOG-poster.
Hvad "1.0.0" faktisk ændrer¶
Sammenlignet med 0.x-serien er 1.0.0 i sig selv ikke en feature-release — det er det punkt, hvorpå forpligtelserne ovenfor begynder at gælde. Kode, der leveres i 1.0.0, er den samme kode, der blev leveret i 0.71.0, plus supply-chain-hærdningen og bidragyder-flow-ændringerne dokumenteret i 1.0.0 CHANGELOG-posten.
Pre-1.0-udgivelser var ikke dækket af denne politik. Migreringer mellem 0.x-versioner kunne og gjorde inkludere skema-drops, omdøbninger og brydende metamodel-ændringer. Fra 1.0.0 og fremefter går disse gennem deprecation-cyklussen.