# Branding Names to Identity

## Why this note exists

The Organization Model now treats `identity.organizationName`, `identity.productName`,
and `identity.shortName` as the preferred source for display naming. The older
`branding.*` name fields remain valid for backward compatibility, but new template code
reads identity first and falls back to branding only for legacy projects.

Branding also now supports first-class expression fields such as `voice`, `tagline`,
`values`, and `themePresetId`, while still accepting tenant-specific passthrough fields.

## Applies to

Template-derived projects that customize Organization Model branding or read
`organizationModel.branding.organizationName`, `productName`, or `shortName` directly in
UI or setup code.

## Required actions

1. Keep existing `branding.organizationName`, `branding.productName`, and
   `branding.shortName` values in place for compatibility.
2. Add matching values under `identity.organizationName`, `identity.productName`, and
   `identity.shortName`.
3. Update project UI code to read `identity.* ?? branding.*` for display naming.
4. Move brand expression into the broadened `branding` fields: `voice`, `tagline`,
   `values`, `themePresetId`, and project-owned passthrough fields as needed.

## Verification

Run the normal template-derived project gates after syncing:

```powershell
pnpm -C core test
pnpm -C ui check-types
pnpm -C ui build
pnpm -C operations check-types
pnpm -C operations check
```

Also open the app shell and Knowledge Base identity/branding views. Confirm display names
render from identity and branding expression fields render under Branding.

## Not handled by /git-sync

`/git-sync` cannot choose real brand voice, tagline, values, logo assets, or custom
passthrough fields for an individual tenant. It also cannot remove legacy
`branding.*` name fields from project-specific code until maintainers confirm every
consumer has migrated to the identity-first fallback.
