GOAL_NOTICE_TEXT_CHAR_LIMIT: Final = GOAL_APPLICATION_CHAR_LIMIT GOAL_STATUS_NOTE_CHAR_LIMITMaximum combined rendered text embedded in one goal-state notice.
Derived rather than written out, because the acceptance checks share it: an
accepted objective-and-criteria pair is validated against this exact value, so
a hand-written literal could drift apart from what _accept_goal_rubric
enforces and let an accepted goal fail its own notice. The acceptance checks
reuse it so a newly accepted goal always keeps the whole status-note budget in
reserve: accepting an application can never produce a goal whose next status
update is already unwritable, no matter how the note is escaped.
The application budget covers objective and criteria, so for ordinary text the
aggregate check here is only reachable via prior_blocker or an oversized
note. HTML escaping is what makes it live for any section: it expands embedded
text up to fivefold, and nothing limits a status note's escaped length, so the
aggregate is the only check that bounds what update_goal can leave embedded.
Raise this deliberately if a new section is ever embedded in a notice.