There seems to be much repetitious text using this "template" in all the PUB* Reason Code sections.
For example:
Lines 2166-2167:
The values for the one byte unsigned Publish Reason Code field are listed in Table 3 6 – PUBREC . If the Remaining Length is 2, then the Publish Reason Code has the value 0x00 (Success).
and then after the table of reason codes
Lines 2171-2173:
The Client or Server sending the PUBREC MUST use one of the PUBREC Reason Codes in Table 3 6 – PUBREC Reason Codes [MQTT-3.5.2-1]. The Reason Code 0x00 (Success) and no Properties may be sent by using a Remaining Length of 2.
Why not delete 2166 and replace with 2171?