feat(catalog): promote buckets to top-level Data Package cards (#301)
Each catalog_data bucket renders as its own top-level Data Package card instead of nested accordions under a single Core Business Data wrapper. Tables flat-listed per package, mirroring the Agnes Internal card. Pluralization fix (1 table / N tables). Includes the 0.54.11 release-cut. Co-authored-by: pcernik-grpn <pcernik-grpn@users.noreply.github.com>
This commit is contained in:
parent
1b0329e8c5
commit
840c68ff1a
3 changed files with 57 additions and 48 deletions
18
CHANGELOG.md
18
CHANGELOG.md
|
|
@ -10,6 +10,24 @@ CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every C
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [0.54.11] — 2026-05-14
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
- Catalog page: each `catalog_data` bucket now renders as its own
|
||||||
|
top-level Data Package card instead of being nested as a collapsible
|
||||||
|
accordion under a single "Core Business Data" wrapper. The page hero
|
||||||
|
title ("Data Packages") now describes the actual visual structure, and
|
||||||
|
the card grain matches the `bucket` column on `table_registry`. Tables
|
||||||
|
inside each package are flat-listed (no per-bucket accordion),
|
||||||
|
mirroring the existing `Agnes Internal` card; the `Agnes Internal` and
|
||||||
|
`Business Metrics` cards themselves are unchanged. Per-table sync info
|
||||||
|
("Synced …" / "Queried directly from BigQuery") on each row is
|
||||||
|
preserved. The aggregate meta line ("N tables · ~M rows total ·
|
||||||
|
Synced X") on the old wrapper is dropped with no replacement — the
|
||||||
|
global sync timestamp is no longer shown on this page. An instance
|
||||||
|
with zero registered tables now renders no Data Package cards at all,
|
||||||
|
where the old wrapper always rendered (showing "0 tables").
|
||||||
|
|
||||||
## [0.54.10] — 2026-05-14
|
## [0.54.10] — 2026-05-14
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
|
|
|
||||||
|
|
@ -1332,7 +1332,13 @@
|
||||||
<!-- ═══════════════ SOURCE CARDS ═══════════════ -->
|
<!-- ═══════════════ SOURCE CARDS ═══════════════ -->
|
||||||
<div class="source-cards">
|
<div class="source-cards">
|
||||||
|
|
||||||
<!-- ── Card 1: Core Business Data ── -->
|
{# ── Data Packages: one source-card per bucket ─────────────────────
|
||||||
|
Previously all buckets were nested as accordions under a single
|
||||||
|
"Core Business Data" wrapper card. Each bucket is now its own
|
||||||
|
top-level Data Package card, matching the page hero title and
|
||||||
|
the bucket grain of the table_registry. The Internal and
|
||||||
|
Business Metrics cards below follow the same flat-list pattern. #}
|
||||||
|
{% for category in catalog_data %}
|
||||||
<div class="source-card">
|
<div class="source-card">
|
||||||
<div class="source-card-header">
|
<div class="source-card-header">
|
||||||
<div class="source-card-left">
|
<div class="source-card-left">
|
||||||
|
|
@ -1346,28 +1352,14 @@
|
||||||
</svg>
|
</svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="source-card-info">
|
<div class="source-card-info">
|
||||||
<div class="source-card-name">Core Business Data</div>
|
<div class="source-card-name">{{ category.name }}</div>
|
||||||
<div class="source-card-desc">Core business data from internal systems</div>
|
<div class="source-card-meta">{{ category.count }} table{{ 's' if category.count != 1 else '' }}</div>
|
||||||
<div class="source-card-meta">
|
|
||||||
{{ data_stats.total_tables or data_stats.tables }} tables · ~{{ data_stats.rows_display }} rows total
|
|
||||||
{% if data_stats.last_updated %}
|
|
||||||
· Synced {{ data_stats.last_updated }}
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% for category in catalog_data %}
|
{# Plain list — tables shown directly; no accordion since the card IS the package. #}
|
||||||
<div class="accordion-category">
|
<div class="accordion-content expanded" style="display: block;">
|
||||||
<button class="accordion-trigger" onclick="toggleAccordion(this)">
|
|
||||||
<svg class="accordion-chevron" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
||||||
<polyline points="9 18 15 12 9 6"/>
|
|
||||||
</svg>
|
|
||||||
{{ category.name }}
|
|
||||||
<span class="accordion-count">{{ category.count }} tables</span>
|
|
||||||
</button>
|
|
||||||
<div class="accordion-content">
|
|
||||||
{% for table in category.tables %}
|
{% for table in category.tables %}
|
||||||
<div class="table-row" {% if table.query_mode != 'remote' %}onclick="openProfiler('{{ table.name }}')"{% endif %}>
|
<div class="table-row" {% if table.query_mode != 'remote' %}onclick="openProfiler('{{ table.name }}')"{% endif %}>
|
||||||
<div class="table-row-left">
|
<div class="table-row-left">
|
||||||
|
|
@ -1402,7 +1394,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
|
||||||
|
|
||||||
{# ── Card: Agnes Internal ─────────────────────────────────────────
|
{# ── Card: Agnes Internal ─────────────────────────────────────────
|
||||||
Renders the three system tables (agnes_sessions / agnes_telemetry /
|
Renders the three system tables (agnes_sessions / agnes_telemetry /
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "agnes-the-ai-analyst"
|
name = "agnes-the-ai-analyst"
|
||||||
version = "0.54.10"
|
version = "0.54.11"
|
||||||
description = "Agnes — AI Data Analyst platform for AI analytical systems"
|
description = "Agnes — AI Data Analyst platform for AI analytical systems"
|
||||||
requires-python = ">=3.11,<3.14"
|
requires-python = ">=3.11,<3.14"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue