// Step 1880 TDD: GR-009 — CrossFileTransactionGate enforces multi-file atomic promotion // // DeploymentPromotionGate tracked single environments (files) independently. // Long-range edits that span multiple files had no atomic gate: one file could // be blocked while others promoted. CrossFileTransactionGate fixes this. // // t1: all files fully checked + approved → transaction promotable // t2: one file has blocking issues → transaction not promotable, that file in blockedFiles // t3: empty transaction → promotable (vacuously) // t4: one file not fully checked → not promotable // t5: mixed: 2 ready + 1 blocked → promotable=false, blockedFiles has exactly 1 #include "CrossFileTransactionGate.h" #include #include static int p=0,f=0; #define T(n) { std::cout<<" "<<#n<<"... "; } #define P() { std::cout<<"PASS\n"; ++p; } #define F(m) { std::cout<<"FAIL: "<