The simplest way to test if the conditional expression of your (if:) macro is valid is to temporary assign the related variables to true within the same Passage as the (if:) macro.
eg. To debug the Passage do something like the following.
(set: $PassageA to true)
(set: $PassageB to true)
(set: $PassageC to true)
(set: $PassageD to true)
(if: $PassageA and $PassageB and $PassageC and $PassageD)[After a long day of walking, you realise you are tired after your pace becomes weary and sluggish. You think about [[heading home->Home]].]
... you may notice some differences between your version of the (if:) macro call and my own:
1. I removed the "is true" check because they are not needed when checking if a value/variable is true or false.
(if: $variable)[This text will only appear if the variable equals true]
(if: not $variable)[This text will only appear if the variable equals false]
(if: $variableA and $variableB)[This text will only appear if both variables equal true]
(if: not $variableA and not $variableB)[This text will only appear if both variables equal false]
2. I removed the (white) space character you place between the close parentheses of the macro and the open square bracket of the associated hook. I did this because it is invalid even though the 2,x series of Harlowe has been changed to ignore it.
(if: $variable)[GOOD: because the is no white space between the close parentheses and the open square bracket.)
(if: $variable) [BAD: because the is white space between the close parentheses and the open square bracket.)
If the (if:) macro works correctly after the temporary change then the issue is that one or more of the related variables aren't being changed to equal true. Or the variables are being reset back to false before the passage with the (if:) macro is being revisited which could happen if you aren't doing the initialisation those variables within your startup tagged special passage.