Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

TEDY.13 — Releases

State: Built — list + TxResourceBar detail (Summary with Resources/Checks/Notes/Tasks · Metadata · Provenance · Comparison) + create. Detail via TxResourceBar. Template: tool-feature. Prefix: TEDY.

Overview

A Release is a publication bundle that groups pinned resource versions (CodeSystem / ValueSet / MapSet) for coordinated review, validation, server sync, and release-notes generation. Served off /releases; numeric id; a draft → active → retired publication lifecycle. The add-to-release bulk action (TEDY.12) already writes into a release; this family adds the release’s own list + detail.

Data model (libs/tedy/src/lib/client/releaseClient.ts — extend)

Release { id?:number, code?, names?:LocalizedName, planned?, releaseDate?, status?, authors?:string[], resources?:ReleaseResource[], terminologyServer? }. ReleaseResource { id?:number, resourceType?:'CodeSystem'|'ValueSet'|'MapSet', resourceId?, resourceVersion?, resourceNames?:LocalizedName }. ReleaseSearchParams extends QueryParams { textContains?, status? } (already present).

REST API (base /releases)

  • Release: GET /releases (search), GET /releases/{id}, POST /releases (create) / PUT /releases/{id} (update).
  • Resources: GET /releases/{id}/resources, POST /releases/{id}/resources (add — already used by TEDY.12), PUT /releases/{id}/resources/{rid}, DELETE /releases/{id}/resources/{rid}.
  • Lifecycle: POST /releases/{id}/draft · /activate · /retire.
  • Sync / notes: POST /releases/{id}/server-sync {resourceId} (→ job), POST /releases/{id}/validate-sync (→ job), POST /releases/{id}/generate-notes; GET /releases/{id}/notes, GET /releases/{id}/notes/{file}.
  • Provenance: GET /releases/{id}/provenances.

Screens

  • List (resource-list) — a standard ResourceList: Code (link → summary) · Name · Status (tag) · Planned · Release date · Authors. Search (textContains); Add (gated *.Release.write).
  • Detail — via TxResourceBar (unversioned “Management” resource, no version chip), tabs:
    • Summary — status + lifecycle actions (Make draft / Activate / Retire) only (the release’s own metadata lives on the Metadata tab, not here); a Resources table (Type · Reference → resource summary · Version · Name · Errors = failing checklist count) with Add resource (draft) and a per-row menu (Edit / Delete, draft-gated); an Unaccomplished checks widget (failing checklist assertions grouped by resource + Run all checksPOST /checklists/assertions/run-checks); a Notes widget (Generate notes + downloadable attachments via /releases/{id}/notes); and a Tasks widget (ResourceTasksWidget scoped to the release). Add/Edit resource = a modal with resource-type → resource autocomplete (searchable CS/VS/MS) → version select for the chosen resource.
    • Metadata (edit) — ResourceForm: code (immutable on edit), name, planned, releaseDate, authors, terminologyServer.
    • Provenance — the release’s provenance history (reuse the provenance widget).
    • Comparison (diff) — per-resource release diff (current vs comparable server), driven by the sync/diff endpoints.

Business rules / constraints

  • Resources are editable only while draft (Add / edit / delete resource). active/retired lock the resource set.
  • Server-sync requires status === 'active' + a terminologyServer + {id}.Release.maintain.
  • Lifecycle: Make draft (from non-draft), Activate (from draft), Retire (unless retired).
  • Add-to-release picks a draft release (see TEDY.12).

Routes & nav

/releases (list), /releases/new (create), /releases/:id/{summary|details|provenances|diff}. Nav: Management → Releases. Add release to TxResourceType / TYPE_SEGMENT / TYPE_LABEL / tabsFor() in TxResourceBar, a TEDY_CONTEXT_META marker (RL), and ReleaseResourceLayout.MODES.

Privileges

*.Release.read (list/view), *.Release.write (add/edit/resources), {id}.Release.write (edit a specific release), {id}.Release.maintain (server-sync).

Phased implementation plan

  1. Data layer — extend releaseClient (loadRelease, saveRelease, loadReleaseResources, updateReleaseResource, deleteReleaseResource, changeReleaseStatus, serverSync, validateSync, generateNotes, loadReleaseProvenances) + useReleases/useRelease hooks + exports.
  2. List (ReleaseList) + route + Management menu entry.
  3. Detail shellTxResourceBar release type + ReleaseResourceLayout (Summary/Metadata/Provenance/Comparison) + routes.
  4. Summary — metadata card + resources table (add/edit/delete, draft-gated) + lifecycle actions.
  5. Metadata create/edit ResourceForm + /releases/new.
  6. Provenance tab (reuse provenance widget) and Comparison (diff) tab; checks / notes / tasks widgets.

Commit + git push origin master:main per phase.

i18n

tedy.release.* (fields.*, status.*, list.*, resource table labels, lifecycle labels, sync/notes labels, validation, notifications).