Canon 0.6.0 freeze: ITC-CAP draft, AVT catalog, joinable review
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s

Finish ITC-WP-0013 (AttributeValueType under ITC-DATA) and ITC-WP-0014
T02/T03/T05/T06/T07. Capability contract schemas, live-catalog review
CLI, landscape/kernel-map pointers. Sit on this version.
This commit is contained in:
tegwick 2026-08-15 19:42:30 +02:00
parent 7805560a60
commit d453e17952
44 changed files with 1485 additions and 137 deletions

View file

@ -26,6 +26,7 @@ This standard provides a canonical vocabulary for:
- fields,
- schemas,
- data elements,
- attribute value types,
- code lists,
- data stores as references,
- data flows,
@ -761,6 +762,30 @@ A **DataType** specifies the technical or logical type of a field or data elemen
---
## 11.15a AttributeValueType
An **AttributeValueType** is a closed, versioned, application-facing value
type for structured capture. It names the type id, meaning, wire encoding,
and whether a CodeList is required. It does not name a widget and it is not
a competing entity with Attribute or Field.
It is a closed profile of **Representation** for capture and forms.
Constraint still owns required/format/cardinality. CodeList still owns
permitted values. Email, phone, and percentage are not types.
The catalog is `models/data/attribute-value-types.yaml`. Current ids:
`text`, `text-long`, `date`, `time`, `datetime`, `amount`, `one-of`,
`some-of`. Reserved: `boolean`, `integer`, `number`, `uri`, `identifier`.
Legacy alias `textarea` normalizes to `text-long`.
`amount` is structured `{value, currency}`. `one-of` / `some-of` require a
CodeList; domain lists are not new types.
**Provenance.** `demand/AttributeValueTypes.md` (citation-evidence),
ITC-WP-0013.
---
## 11.16 Constraint
A **Constraint** is a rule limiting valid data.

View file

@ -0,0 +1,27 @@
# Alignment note — AttributeValueType catalog for citation-evidence
**Consumer:** citation-evidence Capture UX
**Demand:** `demand/AttributeValueTypes.md`
**Catalog:** `models/data/attribute-value-types.yaml`
**Owner:** ITC-DATA
**Canon version:** 0.6.0
citation-evidence should import these ids rather than keep a private type
enum. Widgets, filters, and evidence links stay in the consumer.
| Consumer need | Canon id | Notes |
|---|---|---|
| short text | `text` | already in use |
| textarea | `text-long` | accept `textarea` on load; write `text-long` |
| date | `date` | `YYYY-MM-DD` |
| time | `time` | requested |
| datetime | `datetime` | ISO-8601 |
| amount | `amount` | `{value, currency}` — accepted default |
| single choice | `one-of` | CodeList required; widget is consumer (`select`) |
| multi choice | `some-of` | CodeList required |
| boolean / integer / number / uri / identifier | reserved | do not implement until needed |
Do not add `email`, `phone`, or `percentage` as types. Those are `text` or
`number` plus a Constraint.
CE-WP-0012 widgets remain consumer work.

View file

@ -0,0 +1,129 @@
# InfoTechCanon Attribute Value Type Catalog
#
# Closed, versioned application-facing value types for structured capture.
# Owned by ITC-DATA. Does not name widgets. Encoding rules live here;
# Constraint, CodeList, and Representation stay the owning concepts.
canon:
id: itc-data-attribute-value-types
name: InfoTechCanon Attribute Value Type Catalog
artifact_id: catalog/attribute-value-types
version: 0.1.0
status: draft
canon_version: 0.6.0
owner: model/data
purpose: Closed catalog of capture value types so consumers share ids and
wire encodings without forking a private type system.
normative_document: models/data/InfoTechCanonDataModel.md
provenance:
demand: demand/AttributeValueTypes.md
consumer: citation-evidence
consumer_draft: citation-evidence/wiki/AttributeValueTypes-proposal.md
workplan: ITC-WP-0013
types:
- id: text
status: current
kind: scalar
wire: string
representation: string
description: Short free text.
- id: text-long
status: current
kind: scalar
wire: string
representation: string
description: Long free text. Canonical id for the legacy alias textarea.
aliases: [textarea]
- id: date
status: current
kind: scalar
wire: string
format: YYYY-MM-DD
representation: date
description: Calendar date.
- id: time
status: current
kind: scalar
wire: string
format: HH:MM or HH:MM:SS
representation: string
description: Clock time without a date.
- id: datetime
status: current
kind: scalar
wire: string
format: ISO-8601 local or offset
representation: timestamp
description: Date and time.
- id: amount
status: current
kind: quantity
wire: object
representation: decimal
requires_codelist: currency
description: Quantity plus currency. Wire form is structured JSON.
encoding:
value: decimal-as-string
currency: ISO-4217 code
example: {value: "1500.00", currency: EUR}
- id: one-of
status: current
kind: choice
wire: string
representation: code
requires_codelist: true
cardinality: 1
description: Exactly one value from a CodeList. Wire value is the option id.
- id: some-of
status: current
kind: choice
wire: array
representation: code
requires_codelist: true
cardinality: 0-n
description: Zero or more values from a CodeList. Wire value is an array of
option ids.
- id: boolean
status: reserved
kind: scalar
wire: boolean
representation: boolean
description: Yes/no. Reserved; not required of consumers yet.
- id: integer
status: reserved
kind: scalar
wire: string
representation: integer
description: Integer as decimal digits. Reserved.
- id: number
status: reserved
kind: scalar
wire: string
representation: decimal
description: Decimal number as string. Reserved.
- id: uri
status: reserved
kind: scalar
wire: string
representation: URI
description: URI. Reserved.
- id: identifier
status: reserved
kind: scalar
wire: string
representation: identifier
description: Opaque identifier. Reserved.
rules:
- id: no-email-type
statement: Do not add email, phone, or percentage as types. Use text or
number plus a Constraint.
- id: no-widget
statement: AttributeValueType does not name a UI widget.
- id: alias-normalize
statement: Legacy alias textarea MUST be accepted on read and normalized
to text-long on write.
- id: amount-structured
statement: amount MUST use {value, currency}. A single string is not
canonical.
- id: choice-needs-codelist
statement: one-of and some-of MUST attach a CodeList. Domain-specific
lists are not new types.