პროგრამული უზრუნველყოფის შემუშავებისას, კოდის ცვლილებების აღწერა (commit messages) ისტორიის დაცვისა და გუნდური მუშაობისთვის გადამწყვეტია. ბოლო წლებში პოპულარული გახდა ე.წ. Conventional Commits, თუმცა, ბევრი გამოცდილი დეველოპერი მას მცდარ სტანდარტად მიიჩნევს, რომელიც არასწორ აქცენტებს აკეთებს.

ამ სტანდარტის მთავარი პრობლემა არის პრიორიტეტების არასწორი გადანაწილება. Conventional Commits ცვლილების ტიპს (fix, feat, chore) წინ აყენებს, ხოლო მის კონტექსტს (scope) მეორეხარისხოვანს ხდის. რეალურად, დეველოპერებისთვის, დებაგერებისა და სისტემის ადმინისტრატორებისთვის ყველაზე მნიშვნელოვანი სწორედ ისაა, სად მოხდა ცვლილება და არა ის, თუ რა ეწოდება მას.

როდესაც სისტემაში ხარვეზს ეძებთ, თქვენ გაინტერესებთ კომპონენტი, სადაც პრობლემა გაჩნდა. ცვლილების კატეგორია, როგორც წესი, არაფრისმთქმელია, რადგან ნებისმიერმა ცვლილებამ შეიძლება გამოიწვიოს ახალი შეცდომა. სტანდარტი, რომელიც კონტექსტს სავალდებულოდან არჩევითად აქცევს, ფუნდამენტურად არღვევს კოდის წაკითხვის პროცესს.

გარდა ამისა, სტანდარტის დაპირებები ხშირად შეუსრულებელი რჩება. მაგალითად, ავტომატურად გენერირებული CHANGELOG-ები ხშირად უსარგებლოა, რადგან დეველოპერების მიერ დაწერილი ისტორია და მომხმარებლისთვის საჭირო ფუნქციური ცვლილებები სხვადასხვა მოთხოვნებს აკმაყოფილებს. ავტომატური ვერსიების მართვაც კი ხშირად მცდარია, რადგან ის ვერ ითვალისწინებს ისეთ რთულ შემთხვევებს, როგორიცაა ცვლილებების უკან დაბრუნება (revert) ან არასწორად შეფასებული ცვლილებები.

კორპორატიულ გარემოში, სადაც მოთხოვნილია ბილეთების ნომრების მითითება, Conventional Commits-ის სტრუქტურა კიდევ უფრო იტვირთება. ხშირად, ეს ნომრები ჩაანაცვლებს ერთადერთ სასარგებლო მეტამონაცემს, რაც კოდის ისტორიას სრულიად უკარგავს ღირებულებას.

რა არის გამოსავალი? წარმატებული პროექტები, როგორიცაა Linux, Go ან FreeBSD, არ იყენებენ მსგავს ხელოვნურ შეზღუდვებს. ისინი იყენებენ scope-prefixed მეთოდს, სადაც კონტექსტი პირდაპირაა დაკავშირებული პროექტის სტრუქტურასთან — მაგალითად, ქვესისტემასთან ან პაკეტის გზასთან. ეს მიდგომა ბუნებრივია, მარტივი და ზუსტად გადმოსცემს იმას, რაც რეალურად მოხდა კოდში.

ProjectFormatExample
Linuxsubsystem: descriptioni2c: virtio: mark device ready before registering the adapter
FreeBSDprefix: Descriptionlinuxulator: Return EINVAL for invalid inotify flags
Gitarea: descriptiongitlab-ci: update macOS image
Gopackage: descriptionnet/http/cookiejar: add godoc links
nixpkgspkg-name: descriptionxwayland: 24.1.11 -> 24.1.12
Node.jssubsystem: descriptionstream: fast-path stateless transform flush results

დროა, დეველოპერებმა უარი თქვან ფორმალურ, მაგრამ არაეფექტურ სტანდარტებზე და დაუბრუნდნენ კოდის მართვის იმ გამჭვირვალე მეთოდებს, რომლებიც რეალურად მუშაობს.