The Store catalog and plugin cover show a shirt badge with the course's authored S, M, or L size. This is learning scope, not a promise of completion time. The badge has a label in the reader's language; content.learning.sizeRationale is visible beneath it so keyboard and touch users can read the explanation without hovering.

Course repositories own content.learning.tShirtSize and the rationale. The Store reads those fields from each Education package root using its shared shape-tolerant NodeElement reader. Typed plugin content, raw JSON, and JSON object content produce the same result. Missing metadata, invalid sizes, and non-Education packages render no badge. It does not derive size from course length, price, or a personalized recommendation.

Store/Core/Source/CourseSize owns the reader and badge shared by Store/Catalog and Store/Plugin. The Core Tests area covers content shapes, malformed metadata, category boundaries, normalization without mutation, and translated chrome. The Catalog Tests area verifies that both installed and package-source course cards include the badge. The Plugin Tests area renders the actual cover and checks both the authored and omitted cases.

Reconnecting…
The server was updated. Reloading the page to pick up the latest version.