Skip to content

Other object families

Six families have a reserved block keyword, an address form and a place in the schema, but no encoder and no decoder. They address; they do not round trip.

category "change" {}

HCL201: Block type 'category' is not supported yet

An error. The block yields no model and the import stops.

Keyword Address Mongo collection Identity field
category category.<slug> category name
dash dash.<slug> dashboard title
board board.<slug> plugin_kanban name
notification notification.<slug> notification event_key
calendar calendar.<slug> calendar name
schedule schedule.<slug> scheduler name

cla export does not emit them either: an export enumerates resources, roles, rules and topics, and nothing else.

What the addresses are for

They resolve. A reference from an object that is exported can point at one of these families, and the address survives the round trip:

role "release-manager" {
  grant {
    action = "action.topics.delete"
    bounds {
      id_category = category.release
    }
  }
}

category.release is looked up by name on the importing installation and turned back into that installation's category id. The category itself must already exist there — nothing in these families can be created from a file, so a missing one is HCL230 Unresolved reference unless --allow-missing is given.

The same applies to dashboards, boards, calendars and schedules referenced from anywhere.

Why dash and not dashboard

dashboard is a rule type, and rule types own their keyword. The dashboard collection — saved dashboards — takes dash instead.

The opposite call was made for reports: the report keyword goes to the report CI, because saved reports are objects people manage and move between installs, while the report rule type is rare by comparison. That is why the rule type takes the qualified keyword report_rule.

notification has no name

A notification document has no name field of any kind. Its real identity is (event_key, action) plus a scopes hash. event_key is the closest single field and is not unique on its own, so notification addresses lean on the ordinary clash suffix — several notifications for the same event become notification.foo, notification.foo_1, notification.foo_2. That ordering is stable but the names carry no meaning, which is one reason the family has no encoder yet.

Configuration that is not in HCL at all

Nothing under config/, no cla config setting, no license, no plugin installation and no index or collection state is part of the HCL surface. cla export writes objects; it is not a backup. For a backup, use cla db-dump.

Runtime state is excluded for the same reason: jobs, git revisions, items, assets, posts, reviews and the rest of the internal classes exist in enormous numbers and mean nothing on another installation. --internal includes them if you genuinely need them, on both export and import.

Classes from features and from plugins outside the core distribution are external and left out of an export too, until their author or the person exporting says otherwise.

Topics

Topics have their own family and their own export gate. They are documented separately.