FN-7665: rename Command Center SDLC funnel intake stage label to Planning
Rename the Command Center SDLC funnel's intake stage display text from "Triage" to "Planning" to match the renamed board column, updating English locale copy and tests; the underlying aggregator/i18n key names stay "triage". - SdlcFunnel.tsx: stage label fallback, enteredInRange, and completionRateAria copy changed to Planning/Entered planning/in-range planning entrants; added FNXC comment explaining the key-vs-label distinction - packages/i18n/locales/en/app.json: synced English strings for the same three keys - SdlcFunnel.test.tsx: updated assertions to match new Planning copy - Added changeset (patch) documenting the label rename Files changed: .changeset/fn-7665-funnel-planning-label.md | 7 +++++++ .../app/components/command-center/SdlcFunnel.tsx | 16 ++++++++++++---- .../command-center/__tests__/SdlcFunnel.test.tsx | 6 +++--- packages/i18n/locales/en/app.json | 6 +++--- 4 files changed, 25 insertions(+), 10 deletions(-) Fusion-Task-Id: FN-7665 Fusion-Task-Lineage: d8aec609-6b8b-4f36-bb43-61d7c7c421f9 Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
This commit is contained in:
7
.changeset/fn-7665-funnel-planning-label.md
Normal file
7
.changeset/fn-7665-funnel-planning-label.md
Normal file
@@ -0,0 +1,7 @@
|
||||
---
|
||||
"@runfusion/fusion": patch
|
||||
---
|
||||
|
||||
summary: The Command Center SDLC funnel now labels the intake stage "Planning", matching the renamed board column.
|
||||
category: fix
|
||||
dev: commandCenter.funnel.stage.triage, enteredInRange, and completionRateAria English strings (and SdlcFunnel.tsx t() fallbacks) changed to "Planning"/"Entered planning"/"in-range planning entrants"; dashboard locale copy re-synced. Aggregator stage key "triage" and the i18n key names are unchanged.
|
||||
@@ -12,13 +12,21 @@ import "./SdlcFunnel.css";
|
||||
/** The funnel sub-shape carried on the activity analytics payload (U7). */
|
||||
type SdlcFunnelData = ActivityAnalytics["funnel"];
|
||||
|
||||
/** Human-readable label per stage key, falling back to the raw key. */
|
||||
/**
|
||||
* FNXC:CommandCenter 2026-07-08-00:00:
|
||||
* The SDLC funnel's intake stage displays as "Planning" (not "Triage") for
|
||||
* consistency with the renamed board column (FN-7660/FN-7665). The aggregator
|
||||
* stage KEY produced by aggregateSdlcFunnel and matched below stays "triage" —
|
||||
* only the English display text changes.
|
||||
*
|
||||
* Human-readable label per stage key, falling back to the raw key.
|
||||
*/
|
||||
function useStageLabels(): (stage: string) => string {
|
||||
const { t } = useTranslation("app");
|
||||
return (stage: string) => {
|
||||
switch (stage) {
|
||||
case "triage":
|
||||
return t("commandCenter.funnel.stage.triage", "Triage");
|
||||
return t("commandCenter.funnel.stage.triage", "Planning");
|
||||
case "todo":
|
||||
return t("commandCenter.funnel.stage.todo", "Todo");
|
||||
case "in-progress":
|
||||
@@ -99,7 +107,7 @@ export function SdlcFunnel({ range }: { range: DateRange }) {
|
||||
<RadialGauge
|
||||
value={funnel?.completionRate ?? null}
|
||||
label={t("commandCenter.funnel.completionRate", "Completion rate")}
|
||||
ariaLabel={t("commandCenter.funnel.completionRateAria", "Completion rate for in-range triage entrants")}
|
||||
ariaLabel={t("commandCenter.funnel.completionRateAria", "Completion rate for in-range planning entrants")}
|
||||
/>
|
||||
<span className="cc-stat-sub">
|
||||
{t("commandCenter.funnel.completionRateHint", "Done ÷ entered (in range)")}
|
||||
@@ -124,7 +132,7 @@ export function SdlcFunnel({ range }: { range: DateRange }) {
|
||||
</div>
|
||||
<div className="card cc-stat-card" data-testid="cc-funnel-entered">
|
||||
<div className="cc-stat-label">
|
||||
{t("commandCenter.funnel.enteredInRange", "Entered triage")}
|
||||
{t("commandCenter.funnel.enteredInRange", "Entered planning")}
|
||||
</div>
|
||||
<div className="cc-stat-value">{formatCount(funnel?.enteredInRange ?? 0)}</div>
|
||||
</div>
|
||||
|
||||
@@ -61,7 +61,7 @@ describe("SdlcFunnel", () => {
|
||||
expect(apiMock).toHaveBeenCalledWith(expect.stringContaining("/command-center/activity"), undefined);
|
||||
|
||||
// Funnel bars carry an accessible label per stage with its count.
|
||||
expect(screen.getByLabelText("Triage: 4")).toBeTruthy();
|
||||
expect(screen.getByLabelText("Planning: 4")).toBeTruthy();
|
||||
expect(screen.getByLabelText("In progress: 3")).toBeTruthy();
|
||||
expect(screen.getByLabelText("Done: 2")).toBeTruthy();
|
||||
// Unknown-trait columns surface under "Other".
|
||||
@@ -73,7 +73,7 @@ describe("SdlcFunnel", () => {
|
||||
render(<SdlcFunnel range={range7d} />);
|
||||
|
||||
await screen.findByTestId("cc-area-funnel");
|
||||
expect(screen.getByRole("img", { name: "Completion rate for in-range triage entrants" })).toBeTruthy();
|
||||
expect(screen.getByRole("img", { name: "Completion rate for in-range planning entrants" })).toBeTruthy();
|
||||
expect(screen.getByTestId("cc-funnel-completion-rate").textContent).toContain("50%");
|
||||
expect(screen.getByTestId("cc-funnel-done").textContent).toContain("2");
|
||||
expect(screen.getByTestId("cc-funnel-entered").textContent).toContain("4");
|
||||
@@ -102,7 +102,7 @@ describe("SdlcFunnel", () => {
|
||||
render(<SdlcFunnel range={range7d} />);
|
||||
|
||||
await screen.findByTestId("cc-area-funnel");
|
||||
expect(screen.getByRole("img", { name: "Completion rate for in-range triage entrants" })).toBeTruthy();
|
||||
expect(screen.getByRole("img", { name: "Completion rate for in-range planning entrants" })).toBeTruthy();
|
||||
expect(screen.getByTestId("cc-funnel-completion-rate").textContent).toContain("—");
|
||||
});
|
||||
|
||||
|
||||
@@ -1620,11 +1620,11 @@
|
||||
"funnel": {
|
||||
"ariaLabel": "Tasks per workflow stage",
|
||||
"completionRate": "Completion rate",
|
||||
"completionRateAria": "Completion rate for in-range triage entrants",
|
||||
"completionRateAria": "Completion rate for in-range planning entrants",
|
||||
"completionRateHint": "Done ÷ entered (in range)",
|
||||
"doneInRange": "Reached done",
|
||||
"empty": "No task transitions in the selected range.",
|
||||
"enteredInRange": "Entered triage",
|
||||
"enteredInRange": "Entered planning",
|
||||
"rangeDays_one": "{{count}} day range",
|
||||
"rangeDays_other": "{{count}} day range",
|
||||
"stage": {
|
||||
@@ -1633,7 +1633,7 @@
|
||||
"inReview": "In review",
|
||||
"other": "Other",
|
||||
"todo": "Todo",
|
||||
"triage": "Triage"
|
||||
"triage": "Planning"
|
||||
},
|
||||
"throughputPerDay": "Tasks done / day",
|
||||
"throughputTitle": "Throughput",
|
||||
|
||||
Reference in New Issue
Block a user