c368042c7e
Both fields were made optional to avoid editing test files that were out of scope at the time, but the API populates them on every planned day, so the optionality described nothing real and quietly loosened the contract between the wire format and the client — which is where this codebase has historically gone wrong. The inline objects that forced the compromise now go through the typed test factory instead, so the next field added to a planned day is a one-line change rather than another round of this.