/** * The creator's category tags for the game's portal listing, read out of the project's work * copy (`worldProfileData.categories`) — the CLI lane's equivalent of the Creator publish * dialog's category chips. * * Three distinct messages, mirroring the web lane's precedence exactly: * - `undefined` (key not declared): the server decides — a game with no tags yet is * AI-classified at publish; a game that already has tags keeps them. * - a non-empty array: this exact set wins, replacing whatever is stored. * - an empty array: an explicit "no tags" — clears stored tags AND suppresses the * auto-classification a missing key would trigger. * * game.json wins over world.json for the same key, matching `readFaviconOverride` — the * split-format rule means `worldProfileData` may live in either file. * * Best effort, like the favicon override: a missing, unreadable or malformed file means * "not declared", never an error. Non-string and blank entries are dropped; the server caps * the count and canonicalizes against the live taxonomy. */ export declare function readCategories(root: string): string[] | undefined;