==> Building on amaura ==> Checking for remote environment... ==> Syncing package to remote host... sending incremental file list created directory packages/b4 ./ .SRCINFO 906 100% 0.00kB/s 0:00:00 906 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=10/12) .nvchecker.toml 108 100% 105.47kB/s 0:00:00 108 100% 105.47kB/s 0:00:00 (xfr#2, to-chk=9/12) LICENSE 646 100% 630.86kB/s 0:00:00 646 100% 630.86kB/s 0:00:00 (xfr#3, to-chk=8/12) PKGBUILD 1,706 100% 1.63MB/s 0:00:00 1,706 100% 1.63MB/s 0:00:00 (xfr#4, to-chk=7/12) REUSE.toml 375 100% 366.21kB/s 0:00:00 375 100% 366.21kB/s 0:00:00 (xfr#5, to-chk=6/12) b4-0.15.2-1.log 728 100% 710.94kB/s 0:00:00 728 100% 710.94kB/s 0:00:00 (xfr#6, to-chk=5/12) LICENSES/ LICENSES/0BSD.txt -> ../LICENSE keys/ keys/pgp/ keys/pgp/DE0E66E32F1FDD0902666B96E63EDCA9329DD07E.asc 23,995 100% 3.27MB/s 0:00:00 23,995 100% 3.27MB/s 0:00:00 (xfr#7, to-chk=0/12) sent 20,576 bytes received 209 bytes 8,314.00 bytes/sec total size is 27,939 speedup is 1.34 ==> Ensuring required PGP keys are present...  -> Checking for DE0E66E32F1FDD0902666B96E63EDCA9329DD07E... ==> Running pkgctl build --arch riscv64 on remote host... ==> WARNING: invalid architecture: riscv64 ==> Updating pacman database cache [?25l:: Synchronizing package databases... core downloading... extra downloading... multilib downloading... [?25h==> Building b4 -> repo: extra -> arch: riscv64 -> worker: felix-0 ==> Building b4 for [extra] (riscv64) [?25l:: Synchronizing package databases... core downloading... extra downloading... :: Starting full system upgrade... there is nothing to do [?25h==> Building in chroot for [extra] (riscv64)... ==> Synchronizing chroot copy [/var/lib/archbuild/extra-riscv64/root] -> [felix-0]...done ==> Making package: b4 0.15.2-1 (Sun Aug 30 18:52:09 2026) ==> Retrieving sources...  -> Cloning b4 git repo... Cloning into bare repository '/home/felix/packages/b4/b4'... remote: Enumerating objects: 12276, done. remote: Counting objects: 0% (1/3109) remote: Counting objects: 1% (32/3109) remote: Counting objects: 2% (63/3109) remote: Counting objects: 3% (94/3109) remote: Counting objects: 4% (125/3109) remote: Counting objects: 5% (156/3109) remote: Counting objects: 6% (187/3109) remote: Counting objects: 7% (218/3109) remote: Counting objects: 8% (249/3109) remote: Counting objects: 9% (280/3109) remote: Counting objects: 10% (311/3109) remote: Counting objects: 11% (342/3109) remote: Counting objects: 12% (374/3109) remote: Counting objects: 13% (405/3109) remote: Counting objects: 14% (436/3109) remote: Counting objects: 15% (467/3109) remote: Counting objects: 16% (498/3109) remote: Counting objects: 17% (529/3109) remote: Counting objects: 18% (560/3109) remote: Counting objects: 19% (591/3109) remote: Counting objects: 20% (622/3109) remote: Counting objects: 21% (653/3109) remote: Counting objects: 22% (684/3109) remote: Counting objects: 23% (716/3109) remote: Counting objects: 24% (747/3109) remote: Counting objects: 25% (778/3109) remote: Counting objects: 26% (809/3109) remote: Counting objects: 27% (840/3109) remote: Counting objects: 28% (871/3109) remote: Counting objects: 29% (902/3109) remote: Counting objects: 30% (933/3109) remote: Counting objects: 31% (964/3109) remote: Counting objects: 32% (995/3109) remote: Counting objects: 33% (1026/3109) remote: Counting objects: 34% (1058/3109) remote: Counting objects: 35% (1089/3109) remote: Counting objects: 36% (1120/3109) remote: Counting objects: 37% (1151/3109) remote: Counting objects: 38% (1182/3109) remote: Counting objects: 39% (1213/3109) remote: Counting objects: 40% (1244/3109) remote: Counting objects: 41% (1275/3109) remote: Counting objects: 42% (1306/3109) remote: Counting objects: 43% (1337/3109) remote: Counting objects: 44% (1368/3109) remote: Counting objects: 45% (1400/3109) remote: Counting objects: 46% (1431/3109) remote: Counting objects: 47% (1462/3109) remote: Counting objects: 48% (1493/3109) remote: Counting objects: 49% (1524/3109) remote: Counting objects: 50% (1555/3109) remote: Counting objects: 51% (1586/3109) remote: Counting objects: 52% (1617/3109) remote: Counting objects: 53% (1648/3109) remote: Counting objects: 54% (1679/3109) remote: Counting objects: 55% (1710/3109) remote: Counting objects: 56% (1742/3109) remote: Counting objects: 57% (1773/3109) remote: Counting objects: 58% (1804/3109) remote: Counting objects: 59% (1835/3109) remote: Counting objects: 60% (1866/3109) remote: Counting objects: 61% (1897/3109) remote: Counting objects: 62% (1928/3109) remote: Counting objects: 63% (1959/3109) remote: Counting objects: 64% (1990/3109) remote: Counting objects: 65% (2021/3109) remote: Counting objects: 66% (2052/3109) remote: Counting objects: 67% (2084/3109) remote: Counting objects: 68% (2115/3109) remote: Counting objects: 69% (2146/3109) remote: Counting objects: 70% (2177/3109) remote: Counting objects: 71% (2208/3109) remote: Counting objects: 72% (2239/3109) remote: Counting objects: 73% (2270/3109) remote: Counting objects: 74% (2301/3109) remote: Counting objects: 75% (2332/3109) remote: Counting objects: 76% (2363/3109) remote: Counting objects: 77% (2394/3109) remote: Counting objects: 78% (2426/3109) remote: Counting objects: 79% (2457/3109) remote: Counting objects: 80% (2488/3109) remote: Counting objects: 81% (2519/3109) remote: Counting objects: 82% (2550/3109) remote: Counting objects: 83% (2581/3109) remote: Counting objects: 84% (2612/3109) remote: Counting objects: 85% (2643/3109) remote: Counting objects: 86% (2674/3109) remote: Counting objects: 87% (2705/3109) remote: Counting objects: 88% (2736/3109) remote: Counting objects: 89% (2768/3109) remote: Counting objects: 90% (2799/3109) remote: Counting objects: 91% (2830/3109) remote: Counting objects: 92% (2861/3109) remote: Counting objects: 93% (2892/3109) remote: Counting objects: 94% (2923/3109) remote: Counting objects: 95% (2954/3109) remote: Counting objects: 96% (2985/3109) remote: Counting objects: 97% (3016/3109) remote: Counting objects: 98% (3047/3109) remote: Counting objects: 99% (3078/3109) remote: Counting objects: 100% (3109/3109) remote: Counting objects: 100% (3109/3109), done. remote: Compressing objects: 0% (1/833) remote: Compressing objects: 1% (9/833) remote: Compressing objects: 2% (17/833) remote: Compressing objects: 3% (25/833) remote: Compressing objects: 4% (34/833) remote: Compressing objects: 5% (42/833) remote: Compressing objects: 6% (50/833) remote: Compressing objects: 7% (59/833) remote: Compressing objects: 8% (67/833) remote: Compressing objects: 9% (75/833) remote: Compressing objects: 10% (84/833) remote: Compressing objects: 11% (92/833) remote: Compressing objects: 12% (100/833) remote: Compressing objects: 13% (109/833) remote: Compressing objects: 14% (117/833) remote: Compressing objects: 15% (125/833) remote: Compressing objects: 16% (134/833) remote: Compressing objects: 17% (142/833) remote: Compressing objects: 18% (150/833) remote: Compressing objects: 19% (159/833) remote: Compressing objects: 20% (167/833) remote: Compressing objects: 21% (175/833) remote: Compressing objects: 22% (184/833) remote: Compressing objects: 23% (192/833) remote: Compressing objects: 24% (200/833) remote: Compressing objects: 25% (209/833) remote: Compressing objects: 26% (217/833) remote: Compressing objects: 27% (225/833) remote: Compressing objects: 28% (234/833) remote: Compressing objects: 29% (242/833) remote: Compressing objects: 30% (250/833) remote: Compressing objects: 31% (259/833) remote: Compressing objects: 32% (267/833) remote: Compressing objects: 33% (275/833) remote: Compressing objects: 34% (284/833) remote: Compressing objects: 35% (292/833) remote: Compressing objects: 36% (300/833) remote: Compressing objects: 37% (309/833) remote: Compressing objects: 38% (317/833) remote: Compressing objects: 39% (325/833) remote: Compressing objects: 40% (334/833) remote: Compressing objects: 41% (342/833) remote: Compressing objects: 42% (350/833) remote: Compressing objects: 43% (359/833) remote: Compressing objects: 44% (367/833) remote: Compressing objects: 45% (375/833) remote: Compressing objects: 46% (384/833) remote: Compressing objects: 47% (392/833) remote: Compressing objects: 48% (400/833) remote: Compressing objects: 49% (409/833) remote: Compressing objects: 50% (417/833) remote: Compressing objects: 51% (425/833) remote: Compressing objects: 52% (434/833) remote: Compressing objects: 53% (442/833) remote: Compressing objects: 54% (450/833) remote: Compressing objects: 55% (459/833) remote: Compressing objects: 56% (467/833) remote: Compressing objects: 57% (475/833) remote: Compressing objects: 58% (484/833) remote: Compressing objects: 59% (492/833) remote: Compressing objects: 60% (500/833) remote: Compressing objects: 61% (509/833) remote: Compressing objects: 62% (517/833) remote: Compressing objects: 63% (525/833) remote: Compressing objects: 64% (534/833) remote: Compressing objects: 65% (542/833) remote: Compressing objects: 66% (550/833) remote: Compressing objects: 67% (559/833) remote: Compressing objects: 68% (567/833) remote: Compressing objects: 69% (575/833) remote: Compressing objects: 70% (584/833) remote: Compressing objects: 71% (592/833) remote: Compressing objects: 72% (600/833) remote: Compressing objects: 73% (609/833) remote: Compressing objects: 74% (617/833) remote: Compressing objects: 75% (625/833) remote: Compressing objects: 76% (634/833) remote: Compressing objects: 77% (642/833) remote: Compressing objects: 78% (650/833) remote: Compressing objects: 79% (659/833) remote: Compressing objects: 80% (667/833) remote: Compressing objects: 81% (675/833) remote: Compressing objects: 82% (684/833) remote: Compressing objects: 83% (692/833) remote: Compressing objects: 84% (700/833) remote: Compressing objects: 85% (709/833) remote: Compressing objects: 86% (717/833) remote: Compressing objects: 87% (725/833) remote: Compressing objects: 88% (734/833) remote: Compressing objects: 89% (742/833) remote: Compressing objects: 90% (750/833) remote: Compressing objects: 91% (759/833) remote: Compressing objects: 92% (767/833) remote: Compressing objects: 93% (775/833) remote: Compressing objects: 94% (784/833) remote: Compressing objects: 95% (792/833) remote: Compressing objects: 96% (800/833) remote: Compressing objects: 97% (809/833) remote: Compressing objects: 98% (817/833) remote: Compressing objects: 99% (825/833) remote: Compressing objects: 100% (833/833) remote: Compressing objects: 100% (833/833), done. Receiving objects: 0% (1/12276) Receiving objects: 1% (123/12276), 420.00 KiB | 823.00 KiB/s Receiving objects: 2% (246/12276), 420.00 KiB | 823.00 KiB/s Receiving objects: 3% (369/12276), 420.00 KiB | 823.00 KiB/s Receiving objects: 4% (492/12276), 420.00 KiB | 823.00 KiB/s Receiving objects: 4% (613/12276), 804.00 KiB | 749.00 KiB/s Receiving objects: 5% (614/12276), 804.00 KiB | 749.00 KiB/s Receiving objects: 6% (737/12276), 804.00 KiB | 749.00 KiB/s Receiving objects: 7% (860/12276), 804.00 KiB | 749.00 KiB/s Receiving objects: 8% (983/12276), 804.00 KiB | 749.00 KiB/s Receiving objects: 9% (1105/12276), 804.00 KiB | 749.00 KiB/s Receiving objects: 10% (1228/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 11% (1351/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 12% (1474/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 13% (1596/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 14% (1719/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 15% (1842/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 16% (1965/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 17% (2087/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 18% (2210/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 19% (2333/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 20% (2456/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 21% (2578/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 22% (2701/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 23% (2824/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 24% (2947/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 25% (3069/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 26% (3192/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 27% (3315/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 28% (3438/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 29% (3561/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 30% (3683/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 31% (3806/12276), 1.43 MiB | 925.00 KiB/s Receiving objects: 31% (3885/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 32% (3929/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 33% (4052/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 34% (4174/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 35% (4297/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 36% (4420/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 37% (4543/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 38% (4665/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 39% (4788/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 40% (4911/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 41% (5034/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 42% (5156/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 43% (5279/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 44% (5402/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 45% (5525/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 46% (5647/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 47% (5770/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 48% (5893/12276), 2.00 MiB | 966.00 KiB/s Receiving objects: 49% (6016/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 50% (6138/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 51% (6261/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 52% (6384/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 53% (6507/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 54% (6630/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 55% (6752/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 56% (6875/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 57% (6998/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 58% (7121/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 59% (7243/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 60% (7366/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 61% (7489/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 62% (7612/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 63% (7734/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 64% (7857/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 65% (7980/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 66% (8103/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 67% (8225/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 68% (8348/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 68% (8374/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 69% (8471/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 70% (8594/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 71% (8716/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 72% (8839/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 73% (8962/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 74% (9085/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 75% (9207/12276), 2.64 MiB | 1009.00 KiB/s Receiving objects: 76% (9330/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 77% (9453/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 78% (9576/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 79% (9699/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 80% (9821/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 81% (9944/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 82% (10067/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 83% (10190/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 84% (10312/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 85% (10435/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 86% (10558/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 87% (10681/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 88% (10803/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 89% (10926/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 90% (11049/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 91% (11172/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 92% (11294/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 93% (11417/12276), 3.33 MiB | 1.05 MiB/s Receiving objects: 94% (11540/12276), 4.06 MiB | 1.10 MiB/s Receiving objects: 95% (11663/12276), 4.06 MiB | 1.10 MiB/s Receiving objects: 96% (11785/12276), 4.06 MiB | 1.10 MiB/s Receiving objects: 97% (11908/12276), 4.06 MiB | 1.10 MiB/s Receiving objects: 97% (12029/12276), 4.06 MiB | 1.10 MiB/s Receiving objects: 98% (12031/12276), 4.06 MiB | 1.10 MiB/s Receiving objects: 99% (12154/12276), 4.96 MiB | 1.16 MiB/s remote: Total 12276 (delta 2407), reused 2471 (delta 2275), pack-reused 9167 (from 1) Receiving objects: 100% (12276/12276), 4.96 MiB | 1.16 MiB/s Receiving objects: 100% (12276/12276), 5.20 MiB | 1.17 MiB/s, done. Resolving deltas: 0% (0/8349) Resolving deltas: 1% (84/8349) Resolving deltas: 2% (167/8349) Resolving deltas: 3% (251/8349) Resolving deltas: 4% (334/8349) Resolving deltas: 5% (418/8349) Resolving deltas: 6% (501/8349) Resolving deltas: 7% (585/8349) Resolving deltas: 8% (668/8349) Resolving deltas: 9% (752/8349) Resolving deltas: 10% (835/8349) Resolving deltas: 11% (919/8349) Resolving deltas: 12% (1002/8349) Resolving deltas: 13% (1086/8349) Resolving deltas: 14% (1169/8349) Resolving deltas: 15% (1253/8349) Resolving deltas: 16% (1336/8349) Resolving deltas: 17% (1420/8349) Resolving deltas: 18% (1503/8349) Resolving deltas: 19% (1587/8349) Resolving deltas: 20% (1670/8349) Resolving deltas: 21% (1754/8349) Resolving deltas: 22% (1837/8349) Resolving deltas: 23% (1921/8349) Resolving deltas: 24% (2004/8349) Resolving deltas: 25% (2088/8349) Resolving deltas: 26% (2171/8349) Resolving deltas: 27% (2255/8349) Resolving deltas: 28% (2338/8349) Resolving deltas: 29% (2422/8349) Resolving deltas: 30% (2505/8349) Resolving deltas: 31% (2589/8349) Resolving deltas: 32% (2672/8349) Resolving deltas: 33% (2756/8349) Resolving deltas: 34% (2839/8349) Resolving deltas: 35% (2923/8349) Resolving deltas: 36% (3006/8349) Resolving deltas: 37% (3090/8349) Resolving deltas: 38% (3173/8349) Resolving deltas: 39% (3257/8349) Resolving deltas: 40% (3340/8349) Resolving deltas: 41% (3424/8349) Resolving deltas: 42% (3507/8349) Resolving deltas: 43% (3591/8349) Resolving deltas: 44% (3674/8349) Resolving deltas: 45% (3758/8349) Resolving deltas: 46% (3841/8349) Resolving deltas: 47% (3926/8349) Resolving deltas: 48% (4008/8349) Resolving deltas: 49% (4092/8349) Resolving deltas: 50% (4175/8349) Resolving deltas: 51% (4259/8349) Resolving deltas: 52% (4342/8349) Resolving deltas: 53% (4425/8349) Resolving deltas: 54% (4509/8349) Resolving deltas: 55% (4592/8349) Resolving deltas: 56% (4676/8349) Resolving deltas: 57% (4759/8349) Resolving deltas: 58% (4843/8349) Resolving deltas: 59% (4926/8349) Resolving deltas: 60% (5010/8349) Resolving deltas: 61% (5093/8349) Resolving deltas: 62% (5177/8349) Resolving deltas: 63% (5260/8349) Resolving deltas: 64% (5344/8349) Resolving deltas: 65% (5427/8349) Resolving deltas: 66% (5511/8349) Resolving deltas: 67% (5594/8349) Resolving deltas: 68% (5678/8349) Resolving deltas: 69% (5761/8349) Resolving deltas: 70% (5845/8349) Resolving deltas: 71% (5928/8349) Resolving deltas: 72% (6012/8349) Resolving deltas: 73% (6095/8349) Resolving deltas: 74% (6179/8349) Resolving deltas: 75% (6262/8349) Resolving deltas: 76% (6346/8349) Resolving deltas: 77% (6429/8349) Resolving deltas: 78% (6513/8349) Resolving deltas: 79% (6596/8349) Resolving deltas: 80% (6680/8349) Resolving deltas: 81% (6763/8349) Resolving deltas: 82% (6847/8349) Resolving deltas: 83% (6930/8349) Resolving deltas: 84% (7014/8349) Resolving deltas: 85% (7097/8349) Resolving deltas: 86% (7181/8349) Resolving deltas: 87% (7264/8349) Resolving deltas: 88% (7348/8349) Resolving deltas: 89% (7431/8349) Resolving deltas: 90% (7515/8349) Resolving deltas: 90% (7573/8349) Resolving deltas: 91% (7599/8349) Resolving deltas: 92% (7682/8349) Resolving deltas: 93% (7765/8349) Resolving deltas: 94% (7849/8349) Resolving deltas: 95% (7932/8349) Resolving deltas: 96% (8016/8349) Resolving deltas: 97% (8099/8349) Resolving deltas: 98% (8183/8349) Resolving deltas: 99% (8266/8349) Resolving deltas: 100% (8349/8349) Resolving deltas: 100% (8349/8349), done. ==> Validating source files with sha256sums... b4 ... Passed ==> Verifying source file signatures with gpg... b4 git repo ... Passed ==> Making package: b4 0.15.2-1 (Sun Aug 30 18:52:43 2026) ==> Checking runtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (26) New Version Net Change Download Size extra/git 2.55.0-1 29.92 MiB extra/libsodium 1.0.22-1 0.56 MiB extra/perl-error 0.17030-3 0.04 MiB extra/perl-mailtools 2.22-3 0.10 MiB extra/perl-timedate 2.35-1 0.15 MiB extra/python-certifi 2026.07.22-1 0.02 MiB 0.01 MiB extra/python-cffi 2.1.1-1 1.41 MiB 0.30 MiB extra/python-charset-normalizer 3.4.7-1 0.95 MiB extra/python-idna 3.19-1 0.66 MiB extra/python-linkify-it-py 2.1.0-1 0.20 MiB 0.04 MiB extra/python-markdown-it-py 4.2.0-1 0.81 MiB extra/python-mdit_py_plugins 0.6.1-1 0.54 MiB 0.10 MiB extra/python-mdurl 0.1.2-9 0.06 MiB extra/python-platformdirs 4.11.5-1 0.47 MiB extra/python-pycparser 3.00-1 0.71 MiB extra/python-pygments 2.20.0-1 15.36 MiB extra/python-pynacl 1.6.2-1 1.01 MiB extra/python-rich 15.0.0-1 4.49 MiB extra/python-typing_extensions 4.16.0-1 0.53 MiB extra/python-uc-micro-py 2.0.0-1 0.02 MiB 0.01 MiB extra/python-urllib3 2.6.3-1 1.44 MiB extra/zlib-ng 2.3.3-1 0.23 MiB extra/git-filter-repo 2.47.0-3 0.79 MiB 0.17 MiB extra/patatt 0.8.0-1 0.26 MiB 0.05 MiB extra/python-requests 2.34.2-1 0.76 MiB extra/python-textual 8.2.8-2 10.05 MiB 1.44 MiB Total Download Size: 2.14 MiB Total Installed Size: 71.53 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-textual-8.2.8-2-any downloading... python-cffi-2.1.1-1-riscv64 downloading... git-filter-repo-2.47.0-3-any downloading... python-mdit_py_plugins-0.6.1-1-any downloading... patatt-0.8.0-1-any downloading... python-linkify-it-py-2.1.0-1-any downloading... python-certifi-2026.07.22-1-any downloading... python-uc-micro-py-2.0.0-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing perl-error... installing perl-timedate... installing perl-mailtools... installing zlib-ng... installing git... Optional dependencies for git git-zsh-completion: upstream zsh completion tk: gitk and git gui openssh: ssh transport and crypto man: show help with `git command --help` perl-libwww: git svn perl-term-readkey: git svn and interactive.singlekey setting perl-io-socket-ssl: git send-email TLS support perl-authen-sasl: git send-email TLS support perl-cgi: gitweb (web interface) support python: git svn & git p4 [installed] subversion: git svn org.freedesktop.secrets: keyring credential helper libsecret: libsecret credential helper [installed] less: the default pager for git installing git-filter-repo... installing libsodium... installing python-pycparser... installing python-cffi... Optional dependencies for python-cffi python-setuptools: "limited api" version checking in cffi.setuptools_ext installing python-pynacl... installing patatt... installing python-charset-normalizer... installing python-idna... installing python-urllib3... Optional dependencies for python-urllib3 python-brotli: Brotli support python-brotlicffi: Brotli support python-h2: HTTP/2 support python-pysocks: SOCKS support installing python-certifi... installing python-requests... Optional dependencies for python-requests python-chardet: alternative character encoding library python-pysocks: SOCKS proxy support installing python-mdurl... installing python-markdown-it-py... Optional dependencies for python-markdown-it-py python-mdit_py_plugins: core plugins [pending] python-linkify-it-py: linkify extension [pending] installing python-pygments... installing python-rich... installing python-uc-micro-py... installing python-linkify-it-py... installing python-typing_extensions... installing python-platformdirs... installing python-mdit_py_plugins... installing python-textual... :: Running post-transaction hooks... (1/4) Creating system user accounts... Creating group 'git' with GID 968. Creating user 'git' (git daemon user) with UID 968 and GID 968. (2/4) Reloading system manager configuration... Skipped: Current root is not booted. (3/4) Arming ConditionNeedsUpdate... (4/4) Checking for old perl modules... [?25h==> Checking buildtime dependencies... ==> Installing missing dependencies... [?25lresolving dependencies... looking for conflicting packages... Package (19) New Version Net Change Download Size extra/python-autocommand 2.2.2-9 0.08 MiB extra/python-iniconfig 2.3.0-1 0.07 MiB extra/python-jaraco.collections 5.1.0-3 0.11 MiB extra/python-jaraco.context 6.1.2-1 0.06 MiB extra/python-jaraco.functools 4.1.0-3 0.07 MiB extra/python-jaraco.text 4.0.0-4 0.08 MiB extra/python-more-itertools 11.1.0-1 0.77 MiB extra/python-packaging 26.3-1 1.58 MiB extra/python-pkg_resources 81.0.0-1 0.50 MiB extra/python-pluggy 1.6.0-3.1 0.23 MiB extra/python-pyproject-hooks 1.2.0-6 0.11 MiB extra/python-build 1.4.3-1 0.26 MiB extra/python-docutils 1:0.23-1 6.55 MiB 0.99 MiB extra/python-installer 1.0.0-1 0.20 MiB extra/python-pytest 1:9.0.3-1 4.86 MiB extra/python-pytest-asyncio 1.4.0-1 0.17 MiB 0.04 MiB extra/python-setuptools 1:82.0.1-1 7.35 MiB extra/python-shtab 1.12.0-1 0.26 MiB 0.05 MiB extra/python-wheel 0.48.0-1 0.34 MiB Total Download Size: 1.08 MiB Total Installed Size: 23.63 MiB :: Proceed with installation? [Y/n] :: Retrieving packages... python-docutils-1:0.23-1-any downloading... python-shtab-1.12.0-1-any downloading... python-pytest-asyncio-1.4.0-1-any downloading... checking keyring... checking package integrity... loading package files... checking for file conflicts... :: Processing package changes... installing python-packaging... installing python-pyproject-hooks... installing python-build... Optional dependencies for python-build python-pip: to use as the Python package installer (default) python-uv: to use as the Python package installer python-virtualenv: to use virtualenv for build isolation installing python-docutils... Optional dependencies for python-docutils python-myst-parser: to parse input in "Markdown" (CommonMark) format python-pillow: for some image manipulation operations python-pygments: for syntax highlighting of code directives and roles [installed] installing python-installer... installing python-more-itertools... installing python-jaraco.functools... installing python-jaraco.context... installing python-autocommand... installing python-jaraco.text... Optional dependencies for python-jaraco.text python-inflect: for show-newlines script installing python-jaraco.collections... installing python-wheel... Optional dependencies for python-wheel python-keyring: for wheel.signatures python-xdg: for wheel.signatures python-setuptools: for legacy bdist_wheel subcommand [pending] installing python-pkg_resources... installing python-setuptools... installing python-shtab... installing python-iniconfig... installing python-pluggy... installing python-pytest... installing python-pytest-asyncio... :: Running post-transaction hooks... (1/1) Arming ConditionNeedsUpdate... [?25h==> Retrieving sources... ==> WARNING: Skipping all source file integrity checks. ==> Extracting sources...  -> Creating working copy of b4 git repo... Cloning into 'b4'... done. Switched to a new branch 'makepkg' ==> Starting build()... * Getting build dependencies for wheel... /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2027-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running egg_info creating src/b4.egg-info writing src/b4.egg-info/PKG-INFO writing dependency_links to src/b4.egg-info/dependency_links.txt writing entry points to src/b4.egg-info/entry_points.txt writing requirements to src/b4.egg-info/requires.txt writing top-level names to src/b4.egg-info/top_level.txt writing manifest file 'src/b4.egg-info/SOURCES.txt' reading manifest file 'src/b4.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'src/tests' adding license file 'COPYING' writing manifest file 'src/b4.egg-info/SOURCES.txt' * Building wheel... /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated !! ******************************************************************************** Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0). By 2027-Feb-18, you need to update your project and remove deprecated calls or your builds will no longer be supported. See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! corresp(dist, value, root_dir) /usr/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! dist._finalize_license_expression() /usr/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated. !! ******************************************************************************** Please consider removing the following classifiers in favor of a SPDX license expression: License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+) See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details. ******************************************************************************** !! self._finalize_license_expression() running bdist_wheel running build running build_py creating build/lib/b4 copying src/b4/ez.py -> build/lib/b4 copying src/b4/command.py -> build/lib/b4 copying src/b4/diff.py -> build/lib/b4 copying src/b4/dig.py -> build/lib/b4 copying src/b4/ty.py -> build/lib/b4 copying src/b4/mbox.py -> build/lib/b4 copying src/b4/pr.py -> build/lib/b4 copying src/b4/__init__.py -> build/lib/b4 copying src/b4/kr.py -> build/lib/b4 creating build/lib/b4/review copying src/b4/review/tracking.py -> build/lib/b4/review copying src/b4/review/_review.py -> build/lib/b4/review copying src/b4/review/checks.py -> build/lib/b4/review copying src/b4/review/messages.py -> build/lib/b4/review copying src/b4/review/__init__.py -> build/lib/b4/review creating build/lib/b4/review_tui copying src/b4/review_tui/_lite_app.py -> build/lib/b4/review_tui copying src/b4/review_tui/_common.py -> build/lib/b4/review_tui copying src/b4/review_tui/_tracking_app.py -> build/lib/b4/review_tui copying src/b4/review_tui/_review_app.py -> build/lib/b4/review_tui copying src/b4/review_tui/_pw_app.py -> build/lib/b4/review_tui copying src/b4/review_tui/_entry.py -> build/lib/b4/review_tui copying src/b4/review_tui/__init__.py -> build/lib/b4/review_tui copying src/b4/review_tui/_modals.py -> build/lib/b4/review_tui running egg_info writing src/b4.egg-info/PKG-INFO writing dependency_links to src/b4.egg-info/dependency_links.txt writing entry points to src/b4.egg-info/entry_points.txt writing requirements to src/b4.egg-info/requires.txt writing top-level names to src/b4.egg-info/top_level.txt reading manifest file 'src/b4.egg-info/SOURCES.txt' reading manifest template 'MANIFEST.in' no previously-included directories found matching 'src/tests' adding license file 'COPYING' writing manifest file 'src/b4.egg-info/SOURCES.txt' copying src/b4/py.typed -> build/lib/b4 creating build/lib/b4/templates copying src/b4/templates/shazam-merge-template.example -> build/lib/b4/templates copying src/b4/templates/thanks-am-template.example -> build/lib/b4/templates copying src/b4/templates/thanks-pr-template.example -> build/lib/b4/templates creating build/lib/b4/man copying src/b4/man/b4.1.rst -> build/lib/b4/man installing to build/bdist.linux-riscv64/wheel running install running install_lib creating build/bdist.linux-riscv64/wheel creating build/bdist.linux-riscv64/wheel/b4 copying build/lib/b4/ez.py -> build/bdist.linux-riscv64/wheel/./b4 creating build/bdist.linux-riscv64/wheel/b4/templates copying build/lib/b4/templates/shazam-merge-template.example -> build/bdist.linux-riscv64/wheel/./b4/templates copying build/lib/b4/templates/thanks-pr-template.example -> build/bdist.linux-riscv64/wheel/./b4/templates copying build/lib/b4/templates/thanks-am-template.example -> build/bdist.linux-riscv64/wheel/./b4/templates copying build/lib/b4/command.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/diff.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/dig.py -> build/bdist.linux-riscv64/wheel/./b4 creating build/bdist.linux-riscv64/wheel/b4/review copying build/lib/b4/review/tracking.py -> build/bdist.linux-riscv64/wheel/./b4/review copying build/lib/b4/review/_review.py -> build/bdist.linux-riscv64/wheel/./b4/review copying build/lib/b4/review/checks.py -> build/bdist.linux-riscv64/wheel/./b4/review copying build/lib/b4/review/messages.py -> build/bdist.linux-riscv64/wheel/./b4/review copying build/lib/b4/review/__init__.py -> build/bdist.linux-riscv64/wheel/./b4/review copying build/lib/b4/py.typed -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/ty.py -> build/bdist.linux-riscv64/wheel/./b4 creating build/bdist.linux-riscv64/wheel/b4/man copying build/lib/b4/man/b4.1.rst -> build/bdist.linux-riscv64/wheel/./b4/man copying build/lib/b4/mbox.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/pr.py -> build/bdist.linux-riscv64/wheel/./b4 creating build/bdist.linux-riscv64/wheel/b4/review_tui copying build/lib/b4/review_tui/_lite_app.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/_common.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/_tracking_app.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/_review_app.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/_pw_app.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/_entry.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/__init__.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/review_tui/_modals.py -> build/bdist.linux-riscv64/wheel/./b4/review_tui copying build/lib/b4/__init__.py -> build/bdist.linux-riscv64/wheel/./b4 copying build/lib/b4/kr.py -> build/bdist.linux-riscv64/wheel/./b4 running install_egg_info Copying src/b4.egg-info to build/bdist.linux-riscv64/wheel/./b4-0.15.2-py3.14.egg-info running install_scripts creating build/bdist.linux-riscv64/wheel/b4-0.15.2.dist-info/WHEEL creating '/build/b4/src/b4/dist/.tmp-s5l9526y/b4-0.15.2-py3-none-any.whl' and adding 'build/bdist.linux-riscv64/wheel' to it adding 'b4/__init__.py' adding 'b4/command.py' adding 'b4/diff.py' adding 'b4/dig.py' adding 'b4/ez.py' adding 'b4/kr.py' adding 'b4/mbox.py' adding 'b4/pr.py' adding 'b4/py.typed' adding 'b4/ty.py' adding 'b4/man/b4.1.rst' adding 'b4/review/__init__.py' adding 'b4/review/_review.py' adding 'b4/review/checks.py' adding 'b4/review/messages.py' adding 'b4/review/tracking.py' adding 'b4/review_tui/__init__.py' adding 'b4/review_tui/_common.py' adding 'b4/review_tui/_entry.py' adding 'b4/review_tui/_lite_app.py' adding 'b4/review_tui/_modals.py' adding 'b4/review_tui/_pw_app.py' adding 'b4/review_tui/_review_app.py' adding 'b4/review_tui/_tracking_app.py' adding 'b4/templates/shazam-merge-template.example' adding 'b4/templates/thanks-am-template.example' adding 'b4/templates/thanks-pr-template.example' adding 'b4-0.15.2.dist-info/licenses/COPYING' adding 'b4-0.15.2.dist-info/METADATA' adding 'b4-0.15.2.dist-info/WHEEL' adding 'b4-0.15.2.dist-info/entry_points.txt' adding 'b4-0.15.2.dist-info/top_level.txt' adding 'b4-0.15.2.dist-info/RECORD' removing build/bdist.linux-riscv64/wheel Successfully built b4-0.15.2-py3-none-any.whl ==> Starting check()... ============================= test session starts ============================== platform linux -- Python 3.14.7, pytest-9.0.3, pluggy-1.6.0 rootdir: /build/b4/src/b4 configfile: pyproject.toml plugins: asyncio-1.4.0 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collected 765 items / 4 deselected / 761 selected test___init__.py ....................................................... [ 7%] ........................................... [ 12%] test_display_width.py ............. [ 14%] test_ez.py ...... [ 15%] test_mbox.py ....... [ 16%] test_messages.py ..................... [ 19%] test_patatt.py ...... [ 19%] test_review.py ......................................................... [ 27%] ........................................................................ [ 36%] ........................................................................ [ 46%] ... [ 46%] test_review_checks.py .................................................. [ 53%] ....................................... [ 58%] test_review_show_info.py ................ [ 60%] test_review_tracking.py ................................................ [ 66%] ........................................................................ [ 76%] ............................. [ 80%] test_three_way_merge.py ................................. [ 84%] test_tui_modals.py ................................................... [ 91%] test_tui_review.py ..... [ 91%] test_tui_tracking.py ................................................... [ 98%] F........... [100%] =================================== FAILURES =================================== _______________ TestTargetBranch.test_set_target_branch_from_new _______________ self = _mock_branches = gitdir = '/tmp/pytest-of-builduser/pytest-0/test_set_target_branch_from_ne0/repo' @pytest.mark.asyncio async def test_set_target_branch_from_new(self, _mock_branches: Any, gitdir: str) -> None: """Press t on a new series, type a branch, confirm — DB is updated.""" identifier = 'test-target-new' change_id = 'target-new-1' _seed_db(identifier, [{ 'change_id': change_id, 'subject': '[PATCH] target branch test', 'message_id': 'target-new@ex.com', }]) app = TrackingApp(identifier) > async with app.run_test(size=(120, 30)) as pilot: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /build/b4/src/b4/src/tests/test_tui_tracking.py:1823: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib/python3.14/contextlib.py:221: in __aexit__ await anext(self.gen) /usr/lib/python3.14/site-packages/textual/app.py:2218: in run_test raise self._exception /usr/lib/python3.14/site-packages/textual/message_pump.py:663: in _process_messages_loop await self._dispatch_message(message) /usr/lib/python3.14/site-packages/textual/message_pump.py:727: in _dispatch_message await self.on_event(message) /usr/lib/python3.14/site-packages/textual/app.py:4148: in on_event await super().on_event(event) /usr/lib/python3.14/site-packages/textual/message_pump.py:808: in on_event await self._on_message(event) /usr/lib/python3.14/site-packages/textual/message_pump.py:829: in _on_message await invoke(method, message) /usr/lib/python3.14/site-packages/textual/_callback.py:96: in invoke return await _invoke(callback, *params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/textual/_callback.py:58: in _invoke result = await result ^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/textual/message_pump.py:900: in on_callback await invoke(event.callback) /usr/lib/python3.14/site-packages/textual/_callback.py:96: in invoke return await _invoke(callback, *params) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ /usr/lib/python3.14/site-packages/textual/_callback.py:58: in _invoke result = await result ^^^^^^^^^^^^ /build/b4/src/b4/src/b4/review_tui/_tracking_app.py:802: in _refresh_list await self.mount(header, before=self.query_one(Footer)) ^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = TrackingApp(title='b4 review', classes={'-dark-mode'}, pseudo_classes={'dark', 'focus'}) selector = , expect_type = None def query_one( self, selector: str | type[QueryType], expect_type: type[QueryType] | None = None, ) -> QueryType | Widget: """Get a widget from this widget's children that matches a selector or widget type. Args: selector: A selector or widget type. expect_type: Require the object be of the supplied type, or None for any type. Raises: WrongType: If the wrong type was found. NoMatches: If no node matches the query. Returns: A widget matching the selector. """ _rich_traceback_omit = True base_node = self._get_dom_base() if isinstance(selector, str): query_selector = selector else: query_selector = selector.__name__ if is_id_selector(query_selector): cache_key = (base_node._nodes._updates, query_selector, expect_type) cached_result = base_node._query_one_cache.get(cache_key) if cached_result is not None: return cached_result if ( node := walk_breadth_search_id( base_node, query_selector[1:], with_root=False ) ) is not None: if expect_type is not None and not isinstance(node, expect_type): raise WrongType( f"Node matching {query_selector!r} is the wrong type; expected type {expect_type.__name__!r}, found {node}" ) base_node._query_one_cache[cache_key] = node return node raise NoMatches(f"No nodes match {query_selector!r} on {base_node!r}") try: selector_set = parse_selectors(query_selector) except TokenError: raise InvalidQueryFormat( f"Unable to parse {query_selector!r} as a query; check for syntax errors" ) from None if all(selectors.is_simple for selectors in selector_set): cache_key = (base_node._nodes._updates, query_selector, expect_type) cached_result = base_node._query_one_cache.get(cache_key) if cached_result is not None: return cached_result else: cache_key = None for node in walk_breadth_first(base_node, with_root=False): if not match(selector_set, node): continue if expect_type is not None and not isinstance(node, expect_type): raise WrongType( f"Node matching {query_selector!r} is the wrong type; expected type {expect_type.__name__!r}, found {node}" ) if cache_key is not None: base_node._query_one_cache[cache_key] = node return node > raise NoMatches(f"No nodes match {query_selector!r} on {base_node!r}") E textual.css.query.NoMatches: No nodes match 'Footer' on Screen(id='_default') /usr/lib/python3.14/site-packages/textual/dom.py:1533: NoMatches ------------------------------ Captured log setup ------------------------------ DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager clone --branch master /build/b4/src/b4/src/tests/samples/gitdir.bundle /tmp/pytest-of-builduser/pytest-0/test_set_target_branch_from_ne0/repo DEBUG b4:__init__.py:3052 Running git --no-pager --git-dir /tmp/pytest-of-builduser/pytest-0/test_set_target_branch_from_ne0/repo/.git config --replace-all user.name Test Override DEBUG b4:__init__.py:3052 Running git --no-pager --git-dir /tmp/pytest-of-builduser/pytest-0/test_set_target_branch_from_ne0/repo/.git config --replace-all user.email test-override@example.com DEBUG asyncio:selector_events.py:64 Using selector: EpollSelector ----------------------------- Captured stderr call ----------------------------- ╭───────────────────── Traceback (most recent call last) ──────────────────────╮ │ /build/b4/src/b4/src/b4/review_tui/_tracking_app.py:802 in _refresh_list │ │ │ │ 799 │ │ │ │ │ 800 │ │ │ list_items: List[ListItem] = [TrackedSeriesItem(s) for s │ │ 801 │ │ │ lv = ListView(*list_items, id='tracking-list') │ │ ❱ 802 │ │ │ await self.mount(header, before=self.query_one(Footer)) │ │ 803 │ │ │ await self.mount(lv, before=self.query_one(Footer)) │ │ 804 │ │ │ │ 805 │ │ if self._focus_change_id: │ │ │ │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │ │ │ display_series = [ │ │ │ │ │ { │ │ │ │ │ │ 'track_id': 1, │ │ │ │ │ │ 'change_id': 'target-new-1', │ │ │ │ │ │ 'revision': 1, │ │ │ │ │ │ 'subject': '[PATCH] target branch test', │ │ │ │ │ │ 'sender_name': 'Test Author', │ │ │ │ │ │ 'sender_email': 'author@example.com', │ │ │ │ │ │ 'sent_at': '2026-01-15T10:00:00+00:00', │ │ │ │ │ │ 'added_at': '2026-08-30T18:58:18.978172+00:00', │ │ │ │ │ │ 'status': 'new', │ │ │ │ │ │ 'num_patches': 1, │ │ │ │ │ │ ... +7 │ │ │ │ │ } │ │ │ │ ] │ │ │ │ header = Static(id='tracking-header') │ │ │ │ header_text = 'Submitter A A·R·T Msgs S Subject' │ │ │ │ left = Static(id='title-left') │ │ │ │ list_items = [TrackedSeriesItem()] │ │ │ │ lv = ListView(id='tracking-list') │ │ │ │ self = TrackingApp( │ │ │ │ │ title='b4 review', │ │ │ │ │ classes={'-dark-mode'}, │ │ │ │ │ pseudo_classes={'dark', 'focus'} │ │ │ │ ) │ │ │ │ title_text = ' Tracked Series — test-target-new' │ │ │ │ widget = ListView(id='tracking-list') │ │ │ ╰──────────────────────────────────────────────────────────────────────────╯ │ ╰──────────────────────────────────────────────────────────────────────────────╯ NoMatches: No nodes match 'Footer' on Screen(id='_default') ------------------------------ Captured log call ------------------------------- DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --git-common-dir DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse b4/review/target-new-1 DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --git-common-dir DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager --git-dir /tmp/pytest-of-builduser/pytest-0/test_set_target_branch_from_ne0/repo/.git for-each-ref --format=%(refname:short) refs/heads/b4/review/ DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager --git-dir /tmp/pytest-of-builduser/pytest-0/test_set_target_branch_from_ne0/repo/.git rev-parse --git-common-dir DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse b4/review/target-new-1 DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --git-common-dir DEBUG b4:__init__.py:3052 Running git --no-pager rev-parse --show-toplevel =========================== short test summary info ============================ FAILED test_tui_tracking.py::TestTargetBranch::test_set_target_branch_from_new =========== 1 failed, 760 passed, 4 deselected in 351.19s (0:05:51) ============ ==> ERROR: A failure occurred in check().  Aborting... ==> ERROR: Build failed, check /var/lib/archbuild/extra-riscv64/felix-0/build receiving incremental file list b4-0.15.2-1-riscv64-build.log b4-0.15.2-1-riscv64-check.log sent 62 bytes received 4,987 bytes 3,366.00 bytes/sec total size is 26,830 speedup is 5.31