While inspecting the freshly rebuilt databases, I noticed the following problem : * repo-add adds these two entries in desc file * pacman reads them from desc file (for both local or sync db) * pacman writes them to depends file (only possible with local db) after the following commit : http://projects.archlinux.org/?p=pacman.git;a=commitdiff;h=26f4993e1d67a7daa... By the way, the above commit actually enabled previously unused code, as Nagy noticed : http://www.archlinux.org/pipermail/pacman-dev/2008-January/010662.html This code was only run when local == 0. But when we use db_write, it is always on local db, so we always have local == 1. The fact that this code was previously unused probably explains why this problem hasn't been detected until now. But actually I just found the real reason by going deeper in the history. The replaces and force fields were originally moved from desc to depends during pacman 3 development, but then it was reverted before the release : http://projects.archlinux.org/?p=pacman.git;a=commitdiff;h=13e21110459aaf99d... But only db_read was reverted, not db_write. This was impossible to detect back then because this code was unused. This code was later enabled, leading to the inconsistency. I guess the quickest / easiest fix is to fix db_write to also put force / replaces in the desc file, and then have a new 3.1.x release. The local database will be slightly messed up but it will go away eventually, as upgrade goes. Note that this is totally harmless, because the force / replaces in local db are totally unused. They were just added for consistency / completeness, and to have all informations on -Qi operations. So harmless but still worth fixing imo.