Se lo schema di versione semantico classico "MAJOR.MINOR.PATCH" ha senso, dipende da chi si distribuisce e in particolare quando e con quale frequenza lo si distribuisce all'utente finale . Lo schema è molto utile se lavori con la versione stabile "4.5", dove inizi con 4.5.0. Le versioni 4.5.1, 4.5.2 e così via contengono solo correzioni di errori, mentre già lavori internamente alla versione 4.6.
Ad esempio, se si fornisce un "ramo stabile" all'utente finale, assegnargli una versione 4.5.0 per la distribuzione iniziale e 4.5.1, 4.5.2 ogni volta che si rilascia una patch. Nel tuo sviluppo "agile" interno e nella distribuzione a metà sprint, puoi già avere una versione 4.6, chiamala semplicemente "versione beta". Ogni volta che lo distribuisci a metà sprint, aggiungi il numero di build generato automaticamente come "4.6.beta build 123". Al termine dello sprint, assegnalo "4.6.0" e cambia internamente il numero di versione per lo sprint successivo su "4.7". Iniziare con ".0" è solo una convenzione, è inoltre possibile utilizzare ".0" per contrassegnare le versioni beta e iniziare con ".1" per gli utenti finali. IMHO la parola "beta" è molto più espressiva, dicendo a tutti che lo sprint "non è ancora completato".
Se rilasci un registro delle modifiche completo per l'utente finale con ciascuna versione beta, dipende da te, ma almeno alla fine dello sprint il registro delle modifiche dovrebbe essere completato e ogni volta che fornisci un bugfix all'utente finale, dovresti anche aggiornare i documenti storici.
Troverai la strategia di rilasciare due rami separati, un ramo "stabile" con numeri di versione semantici e un "ramo di sviluppo" contrassegnato con numeri di build o qualcosa di simile, in molti prodotti open source come Inkscape, Firefox o 7-zip.
Se, tuttavia, non lavori con rami stabili e di sviluppo separati e rilasci quotidianamente una nuova versione per l'utente finale, dovresti anche incrementare un numero di versione ogni giorno. In tal caso, i numeri di versione "4.5.1", "4.5.2", ... probabilmente rifletteranno le tue singole implementazioni e non indicheranno la differenza tra correzioni di bug e altre modifiche. Può essere ok, non è più il classico "versioning semantico". In questo scenario, è anche possibile distribuire le versioni 4.5, 4.6, 4.7, 4.8, che non danno alcuna differenza reale.
Per quanto riguarda la tua domanda sulle voci nel tuo registro delle modifiche: IMHO quando qualcosa è visibile all'utente finale, vale la pena inserire una voce nel registro delle modifiche, non appena distribuisci la modifica. Ad esempio, se si utilizza la funzione di attivazione / disattivazione delle modifiche e si apportano modifiche ad alcune funzioni parzialmente cotte che non sono ancora state attivate per l'utente, che non appartengono a un log delle modifiche. Se esegui solo il refactoring, senza modifiche visibili all'utente, ciò non appartiene a un log delle modifiche. Se correggi un bug che potrebbe aver interessato alcuni utenti, questo appartiene sicuramente al log delle modifiche - e dovrebbe essere menzionato lì allo stesso tempo quando distribuisci il bugfix. E non importa se rilasci giornalmente, mensilmente o annualmente.