From 95c06047b3832e5108246cb03828fcd8bde30d5b Mon Sep 17 00:00:00 2001 From: Paul Trowbridge Date: Fri, 25 Sep 2026 01:30:14 -0400 Subject: [PATCH] Group the bridge and the ledger by tag, not label Both named an adjustment by its label first. Every log entry now carries a label -- adjustments all get the version's adjustment segment -- so every adjustment fell under that one name and no tag was ever shown. Co-Authored-By: Claude Opus 5.5 --- ui/src/components/BridgeView.jsx | 8 +++++--- ui/src/components/OperationPanel.jsx | 5 ++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ui/src/components/BridgeView.jsx b/ui/src/components/BridgeView.jsx index 3c5a89f..f18266d 100644 --- a/ui/src/components/BridgeView.jsx +++ b/ui/src/components/BridgeView.jsx @@ -129,9 +129,11 @@ export function buildSteps(rows, { if (isLoad) { loads.value += v; loads.units += u; loads.rows += 1; continue } const meta = logMeta[r.pf_logid] || {} - // label first, the same precedence pf_segment uses, so the bridge and the - // pivot call a step by the same name - const tag = (meta.label || meta.tag || '').trim() + // The tag alone. This used to be label first, to match pf_segment, but every + // adjustment now carries a label -- the version's adjustment segment, the + // same one for all of them -- so the walk collapsed into a single bar and + // no tag was ever shown. The label is the segment; the tag is the initiative. + const tag = (meta.tag || '').trim() // Untagged entries collapse into one step, the same as the ledger's // "N untagged adjustments" line in OperationPanel.jsx -- one bar per // untagged scale/recode would otherwise turn a routine cleanup pass into diff --git a/ui/src/components/OperationPanel.jsx b/ui/src/components/OperationPanel.jsx index b628888..c854cf6 100644 --- a/ui/src/components/OperationPanel.jsx +++ b/ui/src/components/OperationPanel.jsx @@ -582,7 +582,10 @@ function ScaleLedger({ currentTotals, scaleInputs, setScaleInputs, scalePlug, se baseline.push({ ...e, label: name || 'Baseline', kind: 'baseline' }) continue } - const tag = (meta.label || meta.tag || '').trim() + // The tag alone, not the label. Every adjustment is now stamped with a + // label -- the version's adjustment segment -- so label-first put all of + // them under that one name and no tag was ever reached. + const tag = (meta.tag || '').trim() if (tag) { // Grouped case-insensitively. "Keystone reduction" and "Keystone // Reduction" are one initiative typed twice, and splitting them here