Per-column annotation

Per-column annotation on a dataset's Structure tab — description, tags, glossary terms, enum values, and business name editors on each column row, plus the write-path and UI caveats.

Every dataset in the catalog exposes a Structure tab next to its Overview tab. The Structure tab lists the dataset's columns and lets an operator annotate each column with a description, tags, business-glossary terms, enum values, and a business name — the column-level counterparts to the entity-level Overview surfaces. Each column row opens a composer that hosts five sub-editors stacked vertically; saving a sub-editor calls a distinct backend endpoint per sub-surface.

This page covers the composer's five sub-editors, the permissions each one is gated by, the audit-trail coverage per sub-surface, and three load-bearing write-path caveats plus two latent UI hazards.

Where to find it

Open any dataset's detail page → Structure tab. The columns table lists every column with its name, type, primary-key flag, source-side description, and the operator-authored annotations (when set). Clicking a column row expands the composer below the row, surfacing five sub-editors in order:

  1. Description — free-text Markdown rendered with the same pipeline as the entity-level description.

  2. Tags — column-scoped tag chips, sharing the deployment-wide tag vocabulary with Manual Object Tagging.

  3. Glossary terms — business-glossary terms linked to the column, separately from terms linked to the parent dataset (see Business Glossary).

  4. Enum values — operator-curated enumeration list documenting the column's allowed values (one row per enum entry with a label and a description).

  5. Business name — a human-readable alternative to the technical column name, surfaced alongside the technical name everywhere the column is rendered (see Business names).

The composer is the only place to author these annotations; the API is the same surface — third-party clients calling the per-sub-editor endpoints listed below write the same fields with the same caveats.

Permissions

Each sub-editor is gated by a distinct permission:

Sub-editor
Permission
What it gates

Description

The Description sub-editor + PUT /api/datasetfields/{id}/description.

Tags

The Tags sub-editor + PUT /api/datasetfields/{id}/tags.

Term — add

The Add-term affordance on the Terms sub-editor. See the wiring-bug caveat below — this permission is not the one the server enforces today.

Term — delete

The remove-affordance on each term row + DELETE /api/datasetfields/{id}/terms/{term_id}.

Enum values

The Enum-values sub-editor + POST /api/datasetfields/{id}/enum_values.

Business name

The Business-name affordance + PUT /api/datasetfields/{id}/name.

All six are scoped against the dataset that owns the column in the URL, not the column itself — granting any of them on a dataset grants the corresponding edit on every column of that dataset.

Activity trail

Each sub-editor emits its own Activity Feed event on save:

Sub-editor
Activity event
Payload

Description

DATASET_FIELD_DESCRIPTION_UPDATED

Before / after description text.

Tags

DATASET_FIELD_TAGS_UPDATED

Before / after tag-name sets.

Term — add or delete

DATASET_FIELD_TERM_ASSIGNMENT_UPDATED

Before / after term-id sets.

Enum values

DATASET_FIELD_VALUES_UPDATED

Before / after enum-value sets.

Business name

DATASET_FIELD_INTERNAL_NAME_UPDATED

Before / after business name.

All five emit the full before/after payload — column-level annotations have a fuller audit shape than several entity-level mutations (see the Activity Feed scope summary and the Audit trail scope for the platform-wide audit-coverage matrix).

Known limitations and operator caveats

Endpoint
Documented permission (UI gate)
Server-enforced permission (runtime gate)

PUT /api/alerts/{alert_id}/status (resolve an alert)

DATA_ENTITY_ALERT_RESOLVE

DATASET_FIELD_ADD_TERM

POST /api/datasetfields/{dataset_field_id}/terms (add a term to a column)

DATASET_FIELD_ADD_TERM

DATA_ENTITY_ADD_TERM

Where to next

  • Data entity detail page — the parent container for the Structure tab and the Overview tab; covers the per-class panel matrix that decides which tabs appear.

  • Entity description — the entity-level counterpart to the column-level description sub-editor; shares the Markdown renderer and the load-bearing no-write-time-sanitisation caveat across six surfaces (this page is one of the six).

  • Custom metadata — sibling per-entity Overview surface for typed key/value annotations; same authoring philosophy, different cardinality.

  • Manual Object Tagging — the read-side canonical home for tags, including the operator-caveat list for the global vocabulary the column-level Tags sub-editor writes into.

  • Business Glossary — the canonical home for terms; the column-level Terms sub-editor is one of three places terms can be linked (alongside the entity-level Terms panel and the term-mention [[Namespace:Term]] auto-link in any Markdown description).

  • Business names — the canonical home for business-name semantics; the column-level Business-name sub-editor shares the same vocabulary.

  • Permissions — the canonical home for the six DATASET_FIELD_* permissions and the wiring-bug flag on DATASET_FIELD_ADD_TERM.

Last updated