The transition of the /k/ sound in medieval colloquial Latin (also known as Vulgar Latin) into /s/, /ʃ/, and /t͡ʃ/ in French and Italian is a well-known fact with an established view of how it should have happened. I'm not a linguistics expert, but I can't help thinking that the phonetic variation observed in Modern German dialects can be arranged into a significantly smoother and more detailed path of these transitions. I arranged them this way:
This picture shows the multiple outcomes from what was originally a /k/ sound in Vulgar Latin. From the mainstream perspective, the transitions from /k/ to /ʃ/ and from /k/ to /s/ follow completely distinct paths:
/k/ > /kʲ/ > /tʲ/ > /ts/ > /s/ — in Lat.centum > Fr.cent, /k/ > /t͡ʃ/ > /ʃ/ — in Lat.centum > It.cento and Lat.cantare > Fr.chanter.
One of the curious parts of the latter chains is /kʲ/ > /tʲ/. If there is nothing in between, it suggests that in some regions at some point in time speakers of Vulgar Latin regarded /kʲ/ and /tʲ/ as close variations of the same sound while speaking to each other. There is not much detail on how this could happen, apart from attributing this change to a shift of the point of articulation that would only take place in certain phonetic environments.[1]
On the other hand, the example of phonetic variation in the Modern German dialects seems to offer a different perspective. The sound pronounced as /ç/ in Standard German, as in ich, is rendered as /k/ and /kʲ/ in Low German, /ɕ/ (and in certain conditions /j/) in Kölsch and other Central German dialects.
A similar phonetic variation is seen with the very productive Germanic adjectival suffix -ig:
/-ɪç/ in Standard German,
/-ɪk/ in southern dialects of German,
/-ɪɕ/ or /-ɪʃ/ in Central German dialects,
/-əx/ in Dutch.
With all of these variants still observed in the living language varieties, this can provide a credible insight to the possible transformations of the /k/ sound.
Since similar phonetic patterns often recur across different language groups, the sound change from Vulgar Latin /k/ to French /ʃ/ could have passed in the following steps:
/k/ > /kʲ/ > /ç/ > /ɕ/ > /ʃ/, as in Lat.cantare > Fr.chanter.
In this chain, each pair of the neighboring sounds are close allophones, which could be taken for a single phoneme by speakers of the language, as proven by modern Germans. The other possibilities of the development of Vulgar Latin /k/ observable in French can also be aligned with this chain:
/k/ > /kʲ/ > /ç/ > /ɕ/ > /sʲ/ > /s/, as in Lat.centum > Fr.cent, /k/ > /kʲ/ > /ç/ > /j/ > /∅/, as in Lat.facere > Fr.faire.
The phonetic transition path from the older /k/ sound to its descendants in Modern French takes the following shape:
The above chains can also be adjusted to fit a possible transformation path from Vulgar Latin to Italian:
/k/ > /k/, as in Lat.cantare > It.cantare, /k/ > /kʲ/ > /ç/ > /ɕ/ > /t͡ɕ/ > /t͡ʃ/, as in Lat.centum > It.cento.
Similarly, a /t͡ɕ/ or /t͡ʃ/ sound could have also emerged from /ɕ/ in varieties of Old French, not as a predecessor of /ʃ/, but as a regional alternative. This particular variant could have survived in English borrowings like chair and chamber.
The sound change /k/ > /t͡s/ occurring in some Modern Romance languages (like in Sassarese zena and ziddai, akin to Italian cena and città) could have resulted from a further development of /t͡ɕ/ in the same sound chain.
By combining the discussed paths we'll end up with the picture shown in the beginning of this post.