Files
fusion/.changeset
gsxdsm 3b55e2c96c fix(dashboard): the time indicator was gated on a hardcoded legacy lane set (#3014)
## This is a correction to #2996, and that's why it exists

#2996 fixed the **subscription**: `wantsLiveTimeIndicator` kept a
pre-load answer, so the card never joined the shared ticker. I described
it as making renamed-lane cards *"show their live elapsed-time
indicator."*

It made them **eligible to**. They still rendered nothing, because a
second gate rejects them first — and I didn't look past the seam I'd
just fixed.

```ts
const TIME_INDICATOR_COLUMNS = new Set<ColumnId>(["in-progress", "in-review", "done"]);
```

Both the `timeIndicator` memo and the `chipFarRight` layout test
`task.column` against that set directly, so a card in a renamed WIP,
review or completion lane returns `null` whatever its resolved traits
say.

## Why no check saw it

The census counts **comparisons** against legacy ids. This is a `Set`
literal — a **definition**. Nothing in the backlog ever pointed here,
which is the same blind spot that hid `BLOCKER_ESCALATION_COLUMNS` until
someone read the code rather than the report.

## The fix

The gate becomes a role question, with the legacy set kept as the
**no-flags fallback** and marked `DELIBERATE-LITERAL`. A card whose
traits haven't resolved — first paint, or a lane its workflow no longer
declares — behaves exactly as before.

## Measured

| check | result |
|---|---|
| test written first | red for the right reason — control and negative
passed, only the renamed case failed (`expected false to be true`) |
| after the fix | 3 passed |
| reverting the memo gate to the raw set | that case fails again |
| five `TaskCard` suites | **418 tests green** |
| gates | all five green; lint and `tsc` clean |

## The negative case

Resolving traits must not put a live timer on every lane. A card in the
renamed **intake** lane hasn't started, so it stays out — otherwise the
fix trades a missing indicator for a running clock on work that hasn't
begun.

## Worth noting for the pattern

Two of my last four findings came from re-examining my own merged work
rather than from new code: this one, and the `bounded` heuristic
correction in #3012. Fixing one seam and declaring the symptom gone is
its own failure mode — the user-visible behaviour needed *both* halves,
and I only checked the half I'd touched.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-31 00:36:09 -07:00
..
2026-07-26 18:11:47 -07:00

Changeset Format Guide

Each changeset file in this directory describes one user-facing change for release notes.

Required body format

---
"@runfusion/fusion": minor
---

summary: Add a Command Center productivity control for LOC backfills.
category: feature
dev: Uses the new `fn_backfill_loc` tool; settings key `commandCenter.locBackfill`.

Fields

Field Required Description
summary Yes One line, user-facing, max 120 chars. Describe what changed for the operator.
category Yes One of: feature, fix, breaking, security, performance, internal.
dev No Developer or migration detail. Preserved in per-package CHANGELOGs but excluded from distilled release notes.

Audience

The summary is the only content that appears in end-user release notes by default. Write for Fusion operators — describe behavior, fixes, and what changed. Avoid internal class names, file paths, and implementation detail.

Bump types

  • patch — bug fixes, internal changes
  • minor — new features, CLI additions, tools
  • major — breaking changes

Validation

Run pnpm check:changesets to validate. The linter runs in the PR-check gate and test:gate. Legacy freeform changesets pass with a warning during the transition period.