# Changelog All notable changes to Agnes AI Data Analyst. Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). Versions follow [Semantic Versioning](https://semver.org/spec/v2.0.0.html), pre-1.0 — public surface (CLI flags, REST endpoints, `instance.yaml` schema, `extract.duckdb` contract) may shift between minor versions; breaking changes called out under **Changed** or **Removed** with the **BREAKING** marker. CalVer image tags (`stable-YYYY.MM.N`, `dev-YYYY.MM.N`) are produced for every CI build; semver tags (`v0.X.Y`) are cut at release boundaries and reference the same commit as a `stable-*` tag from the same day. --- ## [Unreleased] ## [0.55.0] — 2026-05-19 ### Added - **Extended Data Packages content (v56 schema)** backing the rewritten `/catalog/p/` package detail page per the extended-descriptions admin extended-descriptions spec. Eight new schema fields, validated API, per-section template rendering, Browse-grid card augmentation: * **`data_packages`** gains owner_name + owner_team (rendered as "Owned by X · Team" line on hero + Browse card), tags (JSON list of category strings), long_description (markdown body for the "What it is" section), when_to_use + when_not_to_use (paired "Use it when / Skip it when" panels), example_questions (package- level flagship list as a one-click prompt panel). * **`table_registry`** gains grain, platforms, partition_col, history, gotchas — structured per-table documentation surfaced in the collapsible per-table row on the package detail page. First `gotcha` with `key=true` renders as a distinct "Key gotcha" block. * **Virtual badges** (`curated` / `new`) derived render-time from creator Admin-group membership + 30-day created_at window — no extra DB column needed. Surfaced on Browse-grid cards (`data-badge="…"` hooks) + the detail-page hero. - **`PUT/POST /api/admin/data-packages`** and **`PATCH /api/admin/registry/{id}/docs`** accept the new fields with per-field validation matching the extended-descriptions admin spec checklist (tags ≤8 × ≤30 chars, long_description ≤4000, bullets ≤8 × ≤200, example_questions ≤12, gotchas ≤8). PATCH echoes the fresh state for round-trip rendering. - **CI guard `test_data_packages_no_vendor_content.py`** scans `app/` + `src/` + `cli/` + `config/` + `scripts/` for vendor-specific tokens from the colleague's spec MD; fails CI if any leak into OSS surfaces. Vendor content stays in the private infra repo's admin- import flow. - **`+ New Memory Item`** button on `/admin/corporate-memory` for admin-seeded items (rules, playbooks, decisions). Modal chains POST `/api/memory` → optional PATCH `domain_ids` → POST `/admin/batch?action=approve|mandate`, so admin-created items land directly as Approved (or Mandatory if the Required checkbox is ticked) without going through Pending review. - **`domains: list[str]`** field on every memory-item API response. The bulk + single-item hydration paths now emit the full slug list, in addition to the legacy `domain` single-slug surface kept for back-compat. The admin queue renders all chips with a `+N` overflow past three. - **GET `/api/memory/admin/{id}`** — single-item fetch for admin. Powers the `#item-` deep link from `/memory/d/`'s Edit affordance: the page now fetches the row directly (no pagination racing) and injects it into `_itemsById` so the edit modal opens reliably even when the item is beyond page 1 of All Items. - **PATCH /api/memory/admin/{id}** accepts a new `domain_ids: list[str]` field that atomically replaces the item's full memory-domain membership via `knowledge_item_domains`. The admin item-edit modal now sends this on save so chip-input domain selections actually persist — previously the chip-input was decorative (legacy single-domain `` removed.** The chip-input is now the canonical domain control on `/admin/corporate-memory`; PATCH writes `domain_ids` (list) to the junction. The hidden `` to native `` swatch picker. Server now validates the hex format too (`^#[0-9a-fA-F]{6}$`) — admins can no longer save malformed values like `#ff5733#e0f2fe` that broke the card layout downstream. ### Fixed - **Memory admin modals were dead — duplicate `let _cmdNewDomainId`** in `admin_corporate_memory.html`. The deprecated step-2 RBAC modal left stub `let` declarations that collided with the live state vars declared earlier in the same `