fix: show active TIP product scope
This commit is contained in:
parent
58a2570842
commit
e5917a2250
@ -770,7 +770,7 @@
|
|||||||
<div class="logo-text">Transceiver Intelligence<span>Platform</span></div>
|
<div class="logo-text">Transceiver Intelligence<span>Platform</span></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="header-stats">
|
<div class="header-stats">
|
||||||
<span data-goto="transceivers"><span class="val" id="stat-transceivers">—</span> transceivers</span>
|
<span data-goto="transceivers"><span class="val" id="stat-transceivers">—</span> active products</span>
|
||||||
<span data-goto="vendors"><span class="val" id="stat-vendors">—</span> vendors</span>
|
<span data-goto="vendors"><span class="val" id="stat-vendors">—</span> vendors</span>
|
||||||
<span data-goto="switches"><span class="val" id="stat-switches">—</span> switches</span>
|
<span data-goto="switches"><span class="val" id="stat-switches">—</span> switches</span>
|
||||||
<span data-goto="standards"><span class="val" id="stat-standards">—</span> standards</span>
|
<span data-goto="standards"><span class="val" id="stat-standards">—</span> standards</span>
|
||||||
@ -813,8 +813,9 @@
|
|||||||
<div class="grid mb" style="grid-template-columns: repeat(5, 1fr);">
|
<div class="grid mb" style="grid-template-columns: repeat(5, 1fr);">
|
||||||
<div class="stat-card" data-goto="transceivers">
|
<div class="stat-card" data-goto="transceivers">
|
||||||
<div class="stat-icon blue">⚙</div>
|
<div class="stat-icon blue">⚙</div>
|
||||||
<div class="stat-label">Transceivers</div>
|
<div class="stat-label">Active Products</div>
|
||||||
<div class="stat-val" id="ov-transceivers">—</div>
|
<div class="stat-val" id="ov-transceivers">—</div>
|
||||||
|
<div class="stat-sub" id="ov-transceivers-total" style="font-size:0.68rem;color:var(--text-dim);margin-top:0.2rem">—</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="stat-card" data-goto="transceivers">
|
<div class="stat-card" data-goto="transceivers">
|
||||||
<div class="stat-icon green">★</div>
|
<div class="stat-icon green">★</div>
|
||||||
@ -2563,7 +2564,8 @@ document.querySelectorAll('[data-goto]').forEach(function(elem) {
|
|||||||
async function loadOverview() {
|
async function loadOverview() {
|
||||||
try {
|
try {
|
||||||
var h = await api('/api/health');
|
var h = await api('/api/health');
|
||||||
animateValue(el('stat-transceivers'), h.database.stats.transceiver_count, 800);
|
var activeTransceivers = h.verification?.total || h.database.stats.transceiver_count;
|
||||||
|
animateValue(el('stat-transceivers'), activeTransceivers, 800);
|
||||||
animateValue(el('stat-vendors'), h.database.stats.vendor_count, 600);
|
animateValue(el('stat-vendors'), h.database.stats.vendor_count, 600);
|
||||||
animateValue(el('stat-switches'), h.database.stats.switch_count, 500);
|
animateValue(el('stat-switches'), h.database.stats.switch_count, 500);
|
||||||
animateValue(el('stat-standards'), h.database.stats.standard_count, 500);
|
animateValue(el('stat-standards'), h.database.stats.standard_count, 500);
|
||||||
@ -2588,7 +2590,10 @@ async function loadOverview() {
|
|||||||
+ '</div>';
|
+ '</div>';
|
||||||
}).join(''));
|
}).join(''));
|
||||||
}
|
}
|
||||||
animateValue(el('ov-transceivers'), h.database.stats.transceiver_count, 1000);
|
animateValue(el('ov-transceivers'), activeTransceivers, 1000);
|
||||||
|
var totalRows = Number(h.database.stats.transceiver_count || 0);
|
||||||
|
var inactiveRows = Math.max(0, totalRows - Number(activeTransceivers || 0));
|
||||||
|
el('ov-transceivers-total').textContent = totalRows.toLocaleString() + ' total rows · ' + inactiveRows.toLocaleString() + ' archived/quarantined';
|
||||||
animateValue(el('ov-vendors'), h.database.stats.vendor_count, 800);
|
animateValue(el('ov-vendors'), h.database.stats.vendor_count, 800);
|
||||||
animateValue(el('ov-switches'), h.database.stats.switch_count, 600);
|
animateValue(el('ov-switches'), h.database.stats.switch_count, 600);
|
||||||
animateValue(el('ov-standards'), h.database.stats.standard_count, 700);
|
animateValue(el('ov-standards'), h.database.stats.standard_count, 700);
|
||||||
|
|||||||
@ -1,9 +1,26 @@
|
|||||||
# Current TIP Sync State
|
# Current TIP Sync State
|
||||||
|
|
||||||
Updated: 2026-05-10 12:02 UTC
|
Updated: 2026-05-10 13:25 UTC
|
||||||
|
|
||||||
## Newest Work
|
## Newest Work
|
||||||
|
|
||||||
|
- TIP active-vs-total product counter correction on 2026-05-10 UTC:
|
||||||
|
- fixed another UI ambiguity: the header/Overview showed raw `transceivers` table count (`17781`) while research status correctly used active product scope (`16236`)
|
||||||
|
- changed dashboard header label from `transceivers` to `active products`
|
||||||
|
- changed Overview top card label from `Transceivers` to `Active Products`
|
||||||
|
- top/Overview active product count now uses `h.verification.total`
|
||||||
|
- raw DB rows remain visible as context:
|
||||||
|
- `17781 total rows`
|
||||||
|
- `1545 archived/quarantined`
|
||||||
|
- deployed `packages/dashboard/index.html` to Erik and restarted `tip-api`
|
||||||
|
- live health remains:
|
||||||
|
- raw transceiver rows: `17781`
|
||||||
|
- active products: `16236`
|
||||||
|
- `research_resolved_pct=100`
|
||||||
|
- all `needs_research` buckets: `0`
|
||||||
|
- manual review `pending=0`
|
||||||
|
- TIPLLM training pool updated with active-vs-total product counter rule
|
||||||
|
|
||||||
- TIP Overview dashboard status correction on 2026-05-10 UTC:
|
- TIP Overview dashboard status correction on 2026-05-10 UTC:
|
||||||
- user correctly pointed out that the Overview still looked unfinished because it showed strict `Price Verified`, `Image Verified`, `Details Verified`, and `Fully Verified` progress bars
|
- user correctly pointed out that the Overview still looked unfinished because it showed strict `Price Verified`, `Image Verified`, `Details Verified`, and `Fully Verified` progress bars
|
||||||
- changed `packages/dashboard/index.html` Overview section from `Data Verification Status` to `Data Research Status`
|
- changed `packages/dashboard/index.html` Overview section from `Data Verification Status` to `Data Research Status`
|
||||||
|
|||||||
42
sync/history/2026-05-10-tip-active-product-counter-ui.md
Normal file
42
sync/history/2026-05-10-tip-active-product-counter-ui.md
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# TIP Active Product Counter UI
|
||||||
|
|
||||||
|
Date: 2026-05-10 UTC
|
||||||
|
Owner: Codex
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
The Overview still had one confusing mismatch:
|
||||||
|
|
||||||
|
- Header/Overview showed raw DB rows: `17781 transceivers`
|
||||||
|
- Research status used active scope: `16236`
|
||||||
|
|
||||||
|
This could make TIP look unfinished even though research queues were closed.
|
||||||
|
|
||||||
|
## Change
|
||||||
|
|
||||||
|
Updated `packages/dashboard/index.html`:
|
||||||
|
|
||||||
|
- Header label now says `active products`
|
||||||
|
- Overview card now says `Active Products`
|
||||||
|
- Active product count uses `h.verification.total`
|
||||||
|
- Raw DB row count remains visible as context:
|
||||||
|
- total rows
|
||||||
|
- archived/quarantined rows
|
||||||
|
|
||||||
|
## Live State
|
||||||
|
|
||||||
|
- Raw transceiver rows: `17781`
|
||||||
|
- Active product scope: `16236`
|
||||||
|
- Archived/quarantined/non-active rows: `1545`
|
||||||
|
- `research_resolved_pct=100`
|
||||||
|
- all price/image/details/competitor `needs_research` buckets: `0`
|
||||||
|
- manual review `pending=0`
|
||||||
|
|
||||||
|
## Deployment
|
||||||
|
|
||||||
|
- Deployed dashboard HTML to Erik.
|
||||||
|
- Restarted `tip-api`.
|
||||||
|
|
||||||
|
## Training Pool
|
||||||
|
|
||||||
|
Added `tip-20260510-active-vs-total-products-001` to `training-data/tip-llm-capabilities-v1.jsonl`.
|
||||||
@ -65,3 +65,4 @@
|
|||||||
{"id":"tip-20260510-stale-manual-review-queue-001","source":"codex-tip-manual-review-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. Manual review queues must reflect genuinely actionable work, not stale candidates already superseded by product-level research outcomes."},{"role":"user","content":"The dashboard shows thousands of pending manual equivalence reviews, but product-level competitor_status is already matched or ambiguous. What should TIP do?"},{"role":"assistant","content":"Treat those pending equivalence rows as stale review debt. If the Flexoptix product has terminal `competitor_status` such as `matched`, `no_valid_match`, or `ambiguous`, pending candidate rows are no longer actionable manual work. Reject them with an automated reason that explains whether they were superseded by an existing match, resolved no-valid-match, or resolved ambiguity. Also harden the matcher so it only generates pending equivalences for products whose competitor research is still `unknown` or `needs_research`."}]}
|
{"id":"tip-20260510-stale-manual-review-queue-001","source":"codex-tip-manual-review-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. Manual review queues must reflect genuinely actionable work, not stale candidates already superseded by product-level research outcomes."},{"role":"user","content":"The dashboard shows thousands of pending manual equivalence reviews, but product-level competitor_status is already matched or ambiguous. What should TIP do?"},{"role":"assistant","content":"Treat those pending equivalence rows as stale review debt. If the Flexoptix product has terminal `competitor_status` such as `matched`, `no_valid_match`, or `ambiguous`, pending candidate rows are no longer actionable manual work. Reject them with an automated reason that explains whether they were superseded by an existing match, resolved no-valid-match, or resolved ambiguity. Also harden the matcher so it only generates pending equivalences for products whose competitor research is still `unknown` or `needs_research`."}]}
|
||||||
{"id":"tip-20260510-review-badge-zero-rule-001","source":"codex-tip-manual-review-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. Dashboard counters should show current work, not historical tables."},{"role":"user","content":"How should the Manual Review badge be counted after research-resolution closure?"},{"role":"assistant","content":"Count `pending` manual review only for equivalence rows where `eq.status='pending'` and the Flexoptix product still has `competitor_status IN ('unknown','needs_research')`. Do not show stale pending candidates for products already resolved as `matched`, `no_valid_match`, or `ambiguous`. After the 2026-05-10 cleanup, `transceiver_equivalences` had `pending=0`; the dashboard Review badge should hide."}]}
|
{"id":"tip-20260510-review-badge-zero-rule-001","source":"codex-tip-manual-review-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. Dashboard counters should show current work, not historical tables."},{"role":"user","content":"How should the Manual Review badge be counted after research-resolution closure?"},{"role":"assistant","content":"Count `pending` manual review only for equivalence rows where `eq.status='pending'` and the Flexoptix product still has `competitor_status IN ('unknown','needs_research')`. Do not show stale pending candidates for products already resolved as `matched`, `no_valid_match`, or `ambiguous`. After the 2026-05-10 cleanup, `transceiver_equivalences` had `pending=0`; the dashboard Review badge should hide."}]}
|
||||||
{"id":"tip-20260510-dashboard-research-status-001","source":"codex-tip-dashboard-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. The dashboard must communicate operational truth: completed research is not the same as strict public-source verification."},{"role":"user","content":"The Overview page shows Price Verified 67%, Image Verified 71%, Details Verified 99%, Fully Verified 65%, even though research_resolved is 100%. How should TIP present this?"},{"role":"assistant","content":"On the Overview, show `Data Research Status` using terminal research buckets, not only strict booleans. Cards should report `Price Resolved`, `Image Resolved`, `Details Resolved`, `Competitor Resolved`, and `All Research Resolved`. Compute resolved counts from status buckets: public plus no-public plus ambiguous. Keep strict `fully_verified` visible only as a source-backed quality metric, not as an open-work progress bar. This prevents the dashboard from implying manual work is still open when all `needs_research` buckets are zero."}]}
|
{"id":"tip-20260510-dashboard-research-status-001","source":"codex-tip-dashboard-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. The dashboard must communicate operational truth: completed research is not the same as strict public-source verification."},{"role":"user","content":"The Overview page shows Price Verified 67%, Image Verified 71%, Details Verified 99%, Fully Verified 65%, even though research_resolved is 100%. How should TIP present this?"},{"role":"assistant","content":"On the Overview, show `Data Research Status` using terminal research buckets, not only strict booleans. Cards should report `Price Resolved`, `Image Resolved`, `Details Resolved`, `Competitor Resolved`, and `All Research Resolved`. Compute resolved counts from status buckets: public plus no-public plus ambiguous. Keep strict `fully_verified` visible only as a source-backed quality metric, not as an open-work progress bar. This prevents the dashboard from implying manual work is still open when all `needs_research` buckets are zero."}]}
|
||||||
|
{"id":"tip-20260510-active-vs-total-products-001","source":"codex-tip-dashboard-closure-2026-05-10","kind":"sft-jsonl","messages":[{"role":"system","content":"You are TIP_LLM. Make dashboard counters distinguish active product scope from raw database row counts."},{"role":"user","content":"Why does TIP show 17,781 transceivers at the top but research status says 16,236 products?"},{"role":"assistant","content":"The larger number is the raw `transceivers` table count, including archived/quarantined rows such as NonTransceiver, AOC/DAC families, category/catalog artifacts, and historical rows. The active research scope is `verification.total`, currently 16,236. The dashboard should label the top KPI as `Active Products`, use the active count in the header/overview, and show raw total rows only as context such as `17,781 total rows · 1,545 archived/quarantined`."}]}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user