Problem
After #811 (backlog) and #818 (builders) ship grouping by area/*, the group headers render area names verbatim. GitHub area/* labels are conventionally lowercase (e.g. area/vscode, area/tower, area/porch), so the headers come out as:
vscode (12)
tower (4)
porch (3)
Uncategorized (8)
The lowercase area names look odd sitting next to the capitalized Uncategorized group header — the fallback bucket reads as a proper-noun label while the actual categories read as raw tag IDs.
Desired behavior
Group headers in both the Backlog tree (packages/vscode/src/views/backlog.ts) and the Builders tree (packages/vscode/src/views/builders.ts, once #818 lands) should render area names with consistent capitalization that matches Uncategorized's visual weight. After the fix, the example above would read:
Vscode (12) # or "VSCode" if acronyms are handled
Tower (4)
Porch (3)
Uncategorized (8)
Scope
- Both the backlog group header rendering and the builders-tree group header rendering (whichever lands first inherits the helper; the other adopts it).
- Header rendering only — do NOT change the wire value (
OverviewBacklogItem.area / OverviewBuilder.area) or the UNCATEGORIZED_AREA constant. Those are the canonical sentinel / matcher values; only the displayed label changes.
- Applies to the
BacklogGroupTreeItem label and the equivalent BuilderGroupTreeItem label, not the bucketing logic in groupBacklogByArea.
Open question (for implementer)
Sentence-case (vscode → Vscode) is the simplest rule and matches Uncategorized's shape, but it mangles acronyms (api → Api, ui → Ui). Two options:
- Plain sentence-case via
charAt(0).toUpperCase() + slice(1) — predictable, no config, accepts the acronym mangle as a known cost. Reasonable if the repo's area/* set has no acronyms (codev's current set is fine: vscode, tower, porch, consult, panel, terminal, config, core, docs, cross-cutting — though vscode is debatably an acronym already).
- Per-repo override map — e.g. a setting
codev.areaDisplayNames: Record<string, string> lets a repo customize { "vscode": "VSCode", "api": "API" }. Unconfigured areas fall back to plain sentence-case. Costs one setting; solves the acronym problem.
Implementer picks based on whether the repo's area/* set in the wild actually surfaces acronym pain.
Related
Problem
After #811 (backlog) and #818 (builders) ship grouping by
area/*, the group headers render area names verbatim. GitHubarea/*labels are conventionally lowercase (e.g.area/vscode,area/tower,area/porch), so the headers come out as:The lowercase area names look odd sitting next to the capitalized
Uncategorizedgroup header — the fallback bucket reads as a proper-noun label while the actual categories read as raw tag IDs.Desired behavior
Group headers in both the Backlog tree (
packages/vscode/src/views/backlog.ts) and the Builders tree (packages/vscode/src/views/builders.ts, once #818 lands) should render area names with consistent capitalization that matchesUncategorized's visual weight. After the fix, the example above would read:Scope
OverviewBacklogItem.area/OverviewBuilder.area) or theUNCATEGORIZED_AREAconstant. Those are the canonical sentinel / matcher values; only the displayed label changes.BacklogGroupTreeItemlabel and the equivalentBuilderGroupTreeItemlabel, not the bucketing logic ingroupBacklogByArea.Open question (for implementer)
Sentence-case (
vscode→Vscode) is the simplest rule and matchesUncategorized's shape, but it mangles acronyms (api→Api,ui→Ui). Two options:charAt(0).toUpperCase() + slice(1)— predictable, no config, accepts the acronym mangle as a known cost. Reasonable if the repo'sarea/*set has no acronyms (codev's current set is fine:vscode,tower,porch,consult,panel,terminal,config,core,docs,cross-cutting— thoughvscodeis debatably an acronym already).codev.areaDisplayNames: Record<string, string>lets a repo customize{ "vscode": "VSCode", "api": "API" }. Unconfigured areas fall back to plain sentence-case. Costs one setting; solves the acronym problem.Implementer picks based on whether the repo's
area/*set in the wild actually surfaces acronym pain.Related
parseAreaand theUNCATEGORIZED_AREAconstant (do not change these in this issue)