ConstReadonlyCALENDAR_LOC_MAX: 16How long an event location can be, in characters.
ReadonlyCALENDAR_MAX_SLOTS: 6ReadonlyCALENDAR_SLOTS_MAX: 6How many events the agenda strip can carry.
ReadonlyCALENDAR_TITLE_MAX: 24How long an event title can be, in characters.
ReadonlyFORECAST_COLS_MAX: 8How many columns a forecast strip can carry. The watch re-clamps the count anyway, so slicing here just keeps the count byte honest and the packer in step with the other two.
ReadonlyFORECAST_MAX_COLS: 8ReadonlyFORECAST_NO_TEMP: -1000A forecast column with no reading ships this marker so the watch draws a placeholder.
ReadonlySETTINGS_REQUEST_FRESH: 2A settings request for only whether the watch booted with nothing saved.
ReadonlySETTINGS_REQUEST_FULL: 1A settings request for the watch's whole snapshot, to seed the settings page from.
ReadonlySTOCK_LABEL_MAX: 11How wide a watchlist label is, in characters.
ReadonlySTOCK_MAX_SLOTS: 4ReadonlySTOCK_SLOTS_MAX: 4How many tickers the watchlist strip can carry.
Every cap and marker value the two sides of a strip have to agree on, plus deprecated aliases that read the same numbers.
The watch reads these back out of
c/core/wire/wire_caps.g.h, whichnpm run build:conditionswrites from this table. They are the numbers a decode is bounds-checked against, so a pair that drifted would truncate a strip or refuse a whole message with nothing to show for it.A text cap here counts characters. The C side gets that plus one, because its buffer has to hold a terminator as well.