Categories come only from manifest.categories.
Each entry is lowercased. Tokens that do not match ^[a-z0-9]+(-[a-z0-9]+)*$ are dropped. Duplicates are removed. Unknown-but-well-formed tokens are kept — the W3C list is a convention, not a closed enum.
PWARegistry does not infer categories from the description, title, or domain.
Common tokens include books, business, education, entertainment, finance, fitness, food, games, government, health, kids, lifestyle, magazines, medical, music, navigation, news, personalization, photo, politics, productivity, security, shopping, social, sports, travel, utilities, and weather.