Appearance
July 24, 2026 — Frontend
Release date: Friday, 2026-07-24
Summary
This week replaces the localStorage tender demo with a full API-backed captive tender preparation experience in BMS: create and manage tenders, pick portfolio buildings, edit working copies, write a one-pager summary, attach documents (including download), track activity, run the approve/publish lifecycle, and maintain the preapproved reinsurers directory—gated by tender.* permissions and the existing tender feature flag.
Shipped
- Tenders list & create —
/tendersand/tenders/newwith insurance year, permissions, and nav entry. - Tender workspace — detail tabs: overview (workflow + metadata), buildings, summary, documents, activity.
- Buildings — add from portfolio on
/tenders/:id/buildings/select; list columns aligned with the buildings table (minus inspector); row editor for working-copy data; frozen snapshots after approve. - Summary — editable one-pager fields plus live portfolio key figures stored in
summaryJson. - Documents — upload/delete by kind; Last ned via tender document download API.
- Lifecycle — submit / approve / reject / publish / close / export / delete draft, status-driven actions.
- Reinsurers —
/reinsurersdirectory admin for preapproved markets. - Agent guardrail — always-on
frontend-onlyCursor rule: UI agents must not edit sibling backend repos.
Engineering (commit recap)
Frontend — week of July 18 – July 24, 2026
Window: after 2026-07-17, before 2026-07-25 (--no-merges).
Summary
One large BMS delivery lands captive tender UI on top of a regenerated OpenAPI contract: tendersApi / reinsurersApi, permission keys, workflow helpers, and screens under views/tender/, while removing the demo draft storage. Table toolbar skips empty chrome; tender tables use compact size="sm" wiring consistent with the buildings list.
Themes
- Contract & APIs: OpenAPI sync;
tendersApi(CRUD, buildings, summary, documents + download blob, snapshots, export, activity, lifecycle) andreinsurersApiwith Vitest coverage. - Permissions & routing:
tender.view|edit|manage|approve|publish; feature-flag +RequirePermissionroutes; old/tender*paths redirect to/tenders. - Buildings picker & list: Full-page multi-select; shared list columns (ID, name, manager, address, inspection date/status); remove-from-tender without bloating row height.
- Documents & summary: Flat document list with download; summary key figures from working copies / snapshots.
- Platform hygiene:
frontend-only.mdc+AGENTS.mdnote; emptyTableToolbarno longer renders a padded strip.
Notable fixes or risks (if any)
- Download depends on
GET /tenders/:id/documents/:documentId/downloadbeing deployed with the API the app points at. - Tender seed data may show
(m)for forvalter / inspection on working copies when those fields are not in the tender package—portfolio select has richer inspection fields. - Demo removal: localStorage tender draft modules are gone; anything still linked only to the old demo will break until migrated to
/tenders.