vscode: capitalize area group header labels in backlog and builders trees#893
Merged
Conversation
Collaborator
Author
Architect ReviewLow-risk presentation polish. 294/2 across 7 files, but only 3 production files — CMAP unanimous (gemini=APPROVE, codex=APPROVE, claude=APPROVE), with one cosmetic JSDoc nit (sentence-case → title-case wording in a comment) addressed in Verified
VerdictApproved. Per PIR protocol, the Architect review |
amrmelsayed
added a commit
that referenced
this pull request
May 27, 2026
This was referenced May 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PIR Review: Capitalize area group header labels
Fixes #885
Summary
The Backlog and Builders trees grouped by
area/*rendered headers verbatim (vscode (12),tower (4)), visually inconsistent next to the PascalCaseUncategorized (8)fallback. This PR adds aformatAreaForDisplayhelper in@cluesmith/codev-core/area-grouping(title-case with-/_→ space) and applies it inAreaGroupTreeItem's label, so both trees now renderVscode (12),Tower (4),Cross Cutting (N),Uncategorized (8). The rawareaNamefield, the stableid, and thecontextValuecontinue to use the wire value, so expansion-state persistence and===matchers in the view providers are untouched.Files Changed
packages/core/src/area-grouping.ts(+27 / −0) — newformatAreaForDisplaynext togroupByAreapackages/vscode/src/views/area-group-tree-item.ts(+8 / −1) — wrap only the displayed labelpackages/vscode/src/test/area-grouping.test.ts(+35 / −1) — 7 new casescodev/plans/885-vscode-capitalize-area-group-h.md(+96 / −0) — approved PIR planCommits
830aafe4[PIR vscode: capitalize area group header labels in backlog and builders trees #885] Plan drafta031721e[PIR vscode: capitalize area group header labels in backlog and builders trees #885] Plan revised: title-case + separator-to-space534d94e7[PIR vscode: capitalize area group header labels in backlog and builders trees #885] feat: formatAreaForDisplay helper + apply in AreaGroupTreeItem325ead6d[PIR vscode: capitalize area group header labels in backlog and builders trees #885] test: formatAreaForDisplay casesTest Results
pnpm build: ✓ passpnpm test(vscode-test / mocha + esbuild type-check + lint): ✓ pass (97 tests, 7 new)pnpm test:unit(vitest, separate harness): ✓ pass (49 tests)dev-approvalgate: human reviewed the running worktree viaafx dev pir-885; group headers in both Backlog and Builders trees render with the new capitalization; expansion state survives reload.Architecture Updates
No arch.md changes — this PR adds one helper next to an existing function in the same module, and the call site is a single line. No new module boundary, no new pattern, no consumer-facing API shift. The display-only nature of the helper is documented in its JSDoc (the "wire stays raw" contract).
Lessons Learned Updates
No lessons-learned.md changes. The design call worth recording — display-formatting helpers live in core next to the data they format, not in the view layer — is one instance of a broader pattern already implicit in how
groupByAreais structured. Two data points isn't a pattern. If a third consumer (e.g. dashboard parity for the same view) reusesformatAreaForDisplaydirectly without copy-paste, that becomes a lessons-worthy generalization.Things to Look At During PR Review
area/*set has no real acronyms, sovscode → Vscodereads cleanly. If a downstream repo surfaces real pain (api → Apirather thanAPI), acodev.areaDisplayNames: Record<string, string>config override is a clean non-breaking extension — the helper's signature (single string in, single string out) supports a config-lookup wrapper layered on top with sentence-case fallback. Not paying that cost preemptively.{ vscode: 'VSCode', api: 'API' }map inside framework code would conflict withfeedback_framework_neutral_on_label_semantics— teams using codev decide their own labeling semantics; a user-supplied config is the framework-neutral way to opt in.UNCATEGORIZED_AREAsentinel is intentionally a no-op under the rule (single word, first char already upper). The single uniform path through the helper covers every area including the fallback — no special-case branch.idis preserved (${kind}-group:${areaName}still uses the raw value), so per-group expansion state survives across the rendering change with zero migration.How to Test Locally
For reviewers pulling the branch:
pir-885→ View Diffafx dev pir-885Vscode (N),Tower (N),Porch (N),Cross Cutting (N)if present, andUncategorized (N)last.idstability).contextValuestability).backlog.ts:73/builders.ts:132is untouched).