வெள்ளிக்கிழமை மாலை நான்கு மணிக்கு நீங்கள் ஒரு திருத்தத்தைச் (fix) சமர்ப்பிக்கிறீர்கள். சனிக்கிழமை காலைக்குள், எச்சரிக்கைகள் (alerts) ஒலிக்கத் தொடங்குகின்றன. பதினெட்டு மணிநேரத்திற்கு முன்பு இணைக்கப்பட்ட (merged) ஒரு pull request-ஐக் கண்டறிந்து இந்தச் சம்பவத்தைக் கண்டறிகிறீர்கள். அந்த branch சரியாக compile ஆனது, சோதனைகள் (tests) வெற்றியடைந்தன, ஆனால் PR விளக்கம் (description) காலியாக இருந்தது. அதனுடன் எந்த பணிப் பொருளும் (work item) இணைக்கப்படவில்லை. ஒப்புதல் வரலாறு (approval history) எதையும் காட்டவில்லை. நீங்கள் ஒரு 'ghost merge'-ஐப் பார்த்துக் கொண்டிருக்கிறீர்கள், இப்போது main branch-ஐத் தொடுவதற்கு முன்பே கண்டறியப்பட்டிருக்க வேண்டிய ஒரு குழப்பத்தைச் சரிசெய்ய உங்கள் வார இறுதியைச் செலவிடுகிறீர்கள்.

சிறிய குழுக்கள் ஒவ்வொரு நாளும் இந்த அபாயத்தோடுதான் வாழ்கிறார்கள். ஒவ்வொரு merge-ஐயும் கண்காணிக்கும் ஒரு release manager உங்களிடம் இல்லை. பிரத்யேகக் கொள்கை இயந்திரங்களை (bespoke policy engines) உருவாக்கும் ஒரு platform team உங்களிடம் இல்லை. உங்களிடம் இருப்பது Azure DevOps மட்டுமே, அதன் உள்ளமைக்கப்பட்ட branch policies ஒரு மழுங்கிய கருவியைப் போன்றவை. அவை ஒன்று கதவை முழுமையாக மூடிவிடும் அல்லது அகலமாகத் திறந்துவிடும். இரண்டு ஆய்வாளர்களை (reviewers) கட்டாயப்படுத்தினால், அவசர hotfixes-களை நீங்கள் தடுக்க நேரிடும். விதிகளைத் தளர்த்தினால், டிக்கெட் இல்லாத மாற்றங்களுடன் காலியான விளக்கங்களும் production-க்குச் சென்றுவிடும். இதில் நடுநிலையான வழி என்பது அரிது.

அந்த இடைவெளியைக் கருத்தில் கொண்டே நாங்கள் Gatekeeper-ஐ உருவாக்கினோம். இது குறிப்பாக Azure DevOps-க்காக வடிவமைக்கப்பட்ட ஒரு AI-ஆல் இயங்கும் PR review desk ஆகும், ஆனால் நவீன டெவலப்பர் கருவிகளைப் பற்றி நீங்கள் நினைத்துக்கொண்டிருக்கும் அனைத்தையும் மறந்துவிடுங்கள். இதில் Docker container இல்லை, சந்தாத் திட்டம் (subscription plan) இல்லை, மற்றும் cloud deployment pipeline இல்லை. Gatekeeper என்பது ஒரு ஒற்றை HTML கோப்பு மட்டுமே. அதை உங்கள் உலாவியில் (browser) திறந்து, நான்கு மதிப்புகளை உள்ளிட்டு, ஒரு பொத்தானை அழுத்தினால் போதும். அந்தத் கருவி பின்வரும் மூன்று எளிய கேள்விகளுக்குப் பதிலளிக்கும்: இந்த PR ஒரு டிக்கெட்டுடன் இணைக்கப்பட்டுள்ளதா? ஒரு மனிதர் உண்மையில் இதை ஆய்வு செய்தாரா? மற்றும் குறியீட்டின் தரம் (code quality) நன்றாக உள்ளதா?

அனைத்தையும் ஒரே சுயாதீனக் கோப்பாக (self-contained file) தொகுக்கத் தீர்மானித்தது ஒரு வெறும் யுக்தி (gimmick) அல்ல. இது உண்மையான செயல்பாட்டுத் தலைவலிய்களைத் தீர்க்கிறது. முதலாவதாக, இதைத் தொகுக்கவோ (host) அல்லது பணம் செலுத்தவோ எந்த உள்கட்டமைப்பும் (infrastructure) தேவையில்லை. நீங்கள் ஒரு App Service-ஐ உருவாக்கவோ அல்லது egress செலவுகளைப் பற்றி கவலைப்படவோ தேவையில்லை. இரண்டாவதாக, உங்கள் கடவுச்சொற்கள் (credentials) உங்கள் கணினியை விட்டு வெளியேறாது. உங்கள் Azure DevOps personal access token உலாவியின் நினைவகத்தில் (browser memory) மட்டுமே இருக்கும், நீங்கள் பக்கத்தைப் புதுப்பித்தவுடன் அது மறைந்துவிடும். கசியக்கூடிய ரகசியங்களின் தரவுத்தளம் (database of secrets) எதுவும் இல்லை, மேலும் நம்ப வேண்டிய OAuth server-ம் இல்லை. மூன்றாவதாக, இதைப் பயன்படுத்துவது மிகவும் எளிதானது (frictionless). ஒரு wiki மூலம் யாரையும் இதில் இணைக்க வேண்டிய அவசியமில்லை. நீங்கள் இந்தக் கோப்பை ஒரு மின்னஞ்சலில் இணைக்கலாம் அல்லது Slack thread-இல் பகிரலாம். பெறுநர் அதைத் திறந்து உடனடியாக ஆய்வைத் தொடங்கலாம்.

Fact Layer: Determinism First

Gatekeeper தனது ஆய்வை இரண்டு தனித்தனி அடுக்குகளாகப் பிரிக்கிறது, அந்தப் பிரிவே அதன் நம்பகத்தன்மையின் முதுகெலும்பாகும்.

முதல் அடுக்கு நேரடியாக Azure DevOps REST API-உடன் பேசும் தூய JavaScript ஆகும். இது மாறாத உண்மைகளைச் சரிபார்க்கிறது. ஒரு pull request ஒரு பணிப் பொருளுடன் (work item) இணைக்கப்பட்டிருக்கலாம் அல்லது இணைக்கப்படாமல் இருக்கலாம். ஒரு ஆய்வாளர் ஒப்புதல் வாக்களித்திருக்கலாம் அல்லது அளிக்காமல் இருக்கலாம். விளக்கம் காலியாக இருக்கலாம் அல்லது உண்மையான வாக்கியங்களைக் கொண்டிருக்கலாம். செயல்பாட்டில் உள்ள விவாதங்கள் தீர்க்கப்பட்டிருக்கலாம் அல்லது இன்னும் நிலுவையில் இருக்கலாம்.

குறிப்பாக, Fact Layer நான்கு விஷயங்களைத் தேடுகிறது:

  • Ticket mapping: இந்த PR குறைந்தபட்சம் ஒரு பணிப் பொருளுடன் (work item) இணைக்கப்பட்டுள்ளதா?
  • Reviewer sign-off: யாராவது ஒப்புதல் அளிக்க வாக்களித்தார்களா, அல்லது எண்ணிக்கை இன்னும் பூஜ்ஜியமாக உள்ளதா?
  • Description quality: விளக்கம் காலியாக உள்ளதா அல்லது வெறும் ஒரு அடையாளச் சொல்லாக (placeholder) உள்ளதா?
  • Open discussions: பதிலுக்காகக் காத்திருக்கும் தீர்க்கப்படாத கருத்துத் தொடர்கள் (comment threads) உள்ளனவா?

இந்தச் சரிபார்ப்புகள் பக்கத்தில் காட்சி முத்திரைகளை (visual stamps) உருவாக்குகின்றன. ஒரு பெரிய சிவப்பு நிற 'NOT MAPPED' முத்திரையைத் தவிர்க்க முடியாது. ஒரு அட்டவணை செல்லுக்குள் (table cell) மறைந்திருக்கும் மெல்லிய பச்சை நிறச் சரிக்குறியைக் கவனிக்கத் தவறிவிடலாம். செயல்முறைத் தோல்விகள் சத்தமாகத் தெரிய வேண்டும் என்பதை நாங்கள் ஆரம்பத்திலேயே கற்றுக்கொண்டோம். ஒரு டெவலப்பர் விரைவாக merge செய்ய முயலும்போது, நுணுக்கமான விஷயங்கள் வேலை செய்யாது. தெளிவற்ற தன்மையை (ambiguity) முற்றிலும் நீக்குவதற்காகவே Fact Layer உருவாக்கப்பட்டுள்ளது.

இந்த அடுக்கு தீர்மானிக்கப்பட்ட (deterministic) API பதில்களைச் சார்ந்து இருப்பதால், அதன் துல்லியம் மிக அதிகம். முத்திரை 'NO APPROVAL' என்று இருந்தால், யாரும் ஒப்புதல் பொத்தானை அழுத்தவில்லை என்பதை நீங்கள் உறுதியாகச் சொல்லலாம். அது 'UNRESOLVED THREADS' என்று சொன்னால், உரையாடல் இன்னும் தொடர்கிறது என்று அர்த்தம். இந்த அடுக்கு