If it’s not documented elsewhere, searching within the spec files in the discourse repository will answer things like this with a basic understanding of how programming languages work.
In this case, the following lines in the category spec show that description_text is derived from description and immediately available after setting description.
This says to me that description is the raw string for the description and upon setting it, it gets cooked and assigned to description_text. Or description_text could be calculated when accessed but I doubt it, either way description is the one to set.