Skip to main content

HUTN: A User Guide to PAMoLa's Human-Usable Textual Notation

HUTN (Human-Usable Textual Notation) is PAMoLa's family of textual representations for ordia and clades. It is designed to be readable enough for people to author, inspect, review, and diff, while remaining precise enough for a HUTN ware to parse, emit, exchange, and round-trip PAMoLa content.

HUTN is not a separate modelling language with an independent model behind it. It is a textual projection of PAMoLa content. The same authoritative clade can therefore be displayed in several HUTN profiles without becoming several models.

This guide covers the PAMoLa / Ordium v1.0.0 vocabulary and uses four representative profiles:

  • CHAS, normally the smallest and most convenient human-oriented form;
  • FHAS, the current general-purpose workhorse;
  • FHAN, the corresponding numeric-reference form; and
  • FLUN, the fullest and most explicit form used here for audit and debugging.

Together these examples demonstrate both choices on every HUTN profile axis without reproducing all sixteen possible combinations.

1. The central idea

A PAMoLa model is a graph of first-class items called ordia. One distinguished relation, hasCustodian, supplies a tree-like locality and naming spine inside that graph. An ordium together with all its direct and indirect wards forms a clade.

A HUTN document renders a selected clade. It may expose custodianship through nesting or through explicit properties; it may write properties in a compact badge-specific form or as full key-value pairs; and it may identify referenced ordia by human-readable names or generated numeric labels. These are notation choices. They do not alter the underlying ordia.

A useful mental model is:

PAMoLa clade
├── ordia, identities, properties and references
├── HUTN profile choice
└── textual projection
├── CHAS
├── FHAS
├── FHAN
└── FLUN

2. Principles

2.1 One clade, many textual projections

The variant name says how a clade is rendered, not what kind of model it is. CHAS and FLUN may look very different, but they can denote the same ordia, custody structure, values, and non-custodial references.

2.2 The Core defines the vocabulary; the ware owns the notation

The protected v1.0.0 Core defines the fixed linguistic categories and universal properties. HUTN's punctuation, abbreviation, nesting, label generation, reference resolution, and pretty-printing belong to HUTN ware. This keeps a notation decision out of the Kernel Core and a storage decision out of the notation.

2.3 Custodianship gives locality, but PAMoLa is still a graph

Nesting can show wards compactly, but references such as hasDeclaredType, hasRelatum, hasTag, refersTo, and hasPredicate may point anywhere that the model permits. HUTN is therefore a notation for a graph with a distinguished custodial spine, not merely a tree format.

2.4 Omission is meaningful

PAMoLa uses sparse property storage and total optionality. An omitted property is not automatically an error.

  • An absent Ordium-valued property means that no ordinary target is asserted.
  • An absent data-valued property normally causes its declared virtual default to apply.
  • Explicit undefined and explicit known-unknown are special values and are not the same as absence.
  • § is the compact HUTN lexeme for explicit undefined. The quoted text "§" is simply a one-character string.

An abridged emitter may omit defaults and information recoverable from the selected profile or context. An unabridged emitter expands virtual defaults and identity information, but it must not invent a property edge that is genuinely absent.

2.5 Identity and names are different

Every ordium may be referred to at several levels:

FormMeaningStability
PIDPersistent lifetime identityStable across renaming, re-custody, serialisation, and backend migration
FQNName derived from the current custodian pathUnique in a well-formed current state, but changes when name or custody changes
SUNShortest unique symbolic reference in the current HUTN contextContext-dependent
Numeric labelGenerated document-local label such as EN8 or PA2Local to one serialisation

A numeric label is not an ordium's hasName, FQN, or PID.

2.6 Textual order is not automatically model order

The property follows is a general sequencing pointer. It is not an implicit ward-ordering relation. Indentation or the order of records in a file must not silently create follows facts unless the selected profile explicitly defines such an encoding for that context. Use follows only when the model actually asserts a sequence.

2.7 A HUTN profile is part of the parsing contract

A parser must know—or reliably infer—the selected profile, root context, imports, and reference-resolution environment. Round-trip behaviour is therefore a property of the HUTN text plus its profile and context, not of character strings in isolation.

3. The four profile axes

A HUTN profile name selects one pole on four independent axes:

[Compact / Full]
[Hierarchical / Linear]
[Abridged / Unabridged]
[SUN / Numeric]

The four-letter acronym uses one letter from each row, in that order.

AxisFirst choiceSecond choice
RepresentationCompact: badge-specific signatures and notation sugarFull: named key-value properties
CustodianshipHierarchical: nesting expresses custodyLinear: records are separate and hasCustodian is explicit
Defaults/detailAbridged: selected defaults and reconstructible detail are omittedUnabridged: virtual defaults, identities, and diagnostic detail are exposed
ReferencesSUN: shortest unique symbolic referencesNumeric: generated labels such as EN3 and PA2

Examples:

  • FHAS = Full, Hierarchical, Abridged, SUN.
  • CHAS = Compact, Hierarchical, Abridged, SUN.
  • FHAN = Full, Hierarchical, Abridged, Numeric.
  • FLUN = Full, Linear, Unabridged, Numeric.

3.1 Curated profiles used in this guide

ProfileMain useRelative sizeWhat it demonstrates
CHASHuman authoring, examples, reviewsUsually smallestCompact syntax
FHASGeneral exchange, fixtures, current PAMoLa workMediumFull property syntax with readable references
FHANGenerated fixtures, ambiguous names, exact local cross-referenceMediumNumeric references
FLUNAudit, debugging, conformance, migrationLargestLinear custody and unabridged detail
AxisFirst pole demonstrated bySecond pole demonstrated by
Compact / FullCHASFHAS, FHAN, FLUN
Hierarchical / LinearCHAS, FHAS, FHANFLUN
Abridged / UnabridgedCHAS, FHAS, FHANFLUN
SUN / NumericCHAS, FHASFHAN, FLUN

4. Basic syntax

4.1 Badges

Each rendered ordium begins with a short badge or with a numeric label whose prefix is that badge. In SUN mode, for example:

EN {hasName "Person"}
PA {hasName "customer", hasRelatum Person}

In numeric mode, the same records may begin EN7 and PA1.

BadgeCore categoryMain purpose
OMOrdiumBootstrap/Core ordium form
ENEntityIdentity-bearing clabject, including domain types and individuals
RERelationshipA connection as a first-class clabject
PAParticipationA relationship end, role, multiplicity, or access path
CACategorisationA categorisation or generalisation-set structure
ICIntercalationA general or special side of a categorisation
ATAttributeA data-valued feature or value-bearing moment
MEMethodAn immanent behavioural feature
DTDataTypeA datatype and its value space
DVDataValueA typed value, profile value, or tuple component
LILiteralA lexical form denoting a value
MKMarkerA typed annotation, profile adornment, or auxiliary marker
AFArtifactA reference to an external artefact
OPOperationA reusable callable or rule-bearing operation
PMParameterA formal parameter or rule variable
AGArgumentAn occurrence that binds or fills a parameter
AOAtomA predicate application in rule content
INInvocationA static call or invocation description
ACActionA runtime or requested action occurrence

The six abstract Core categories—ImmanentOrdium, TranscendentOrdium, BehaviouralOrdium, Clabject, Mediation, and Moment—are normally derived classifications rather than ordinary concrete HUTN badges.

4.2 Full records

Full HUTN writes property names explicitly:

EN {hasName "Person", hasPotency 1, hasDeclaredType O0.OwnerType}

Commas separate properties and nested ward records.

4.3 Compact records

Compact HUTN uses badge-specific signatures:

EN Person : O0.OwnerType ^1 {
AT name : String {durability=1, mutability=1}
}

The colon expresses declared type, ^1 expresses potency, and the attribute signature abbreviates hasName, hasDataType, hasValue, hasDurability, and hasMutability.

Compact syntax is defined by the profile. It should not be guessed by deleting property names from a full record.

4.4 Hierarchical and linear custody

A hierarchical record uses nesting:

EN {hasName "O1",
EN {hasName "Person"}
}

A linear record makes custody explicit:

EN5 {hasName "O1", hasCustodian EN1}
EN7 {hasName "Person", hasCustodian EN5}

The two forms express the same custodian edge.

4.5 Strings, scalar values, and references

HUTN parsing is type-directed.

hasName "Person" // string-valued property
hasDeclaredType O0.OwnerType // Ordium-valued reference
hasPotency 2 // integer-valued property
hasValue 2000-01-01 // Date value in a Date-typed slot
hasUpperBound unlimited // Multiplicity value

Quoted text denotes a string. An unquoted token in an Ordium-valued slot is resolved as an ordium reference. An unquoted token in a data-valued slot is interpreted according to the property's or attribute's datatype.

4.6 SUN resolution

A SUN is the shortest symbolic form that uniquely resolves in the selected rendering context. For example, AccountType may suffice locally, while O0.AccountType may be needed from another level container.

A resolver may use:

  • the local symbol table;
  • the current clade and custodian path;
  • an FQN;
  • a PID;
  • an import mapping; or
  • a shortest unique path.

SUNs improve readability without replacing persistent identity.

4.7 Names

For ordinary v1.0.0 ordia, hasName follows:

^[A-Za-z][A-Za-z0-9_-]*$

Names begin with a letter and may contain letters, digits, _, and -. . is reserved for FQN/path syntax, : is notation syntax, and § is not part of an ordinary name. DataValue names are the exception because their names may be lexical values such as 0, 1, or *.

5. Running AccountModel Example

The same deliberately small multilevel account model is used in all four renderings.

c13eec11-25e6-46fa-afbb-2b9387ab4964

This is a visual rendering of the AccountModel clase shown below.

AccountModel
├── O0
│ ├── AccountType²
│ └── OwnerType²
├── O1
│ ├── Account⁰
│ │ └── balanceInCents : Integer
│ ├── Person¹ : OwnerType
│ │ └── name : String
│ ├── CheckingAccount¹ : AccountType
│ ├── SavingsAccount¹ : AccountType
│ ├── AccountKinds
│ │ ├── general → Account
│ │ ├── special → CheckingAccount
│ │ └── special → SavingsAccount
│ └── holds¹
│ ├── customer → Person [1..1]
│ └── account → Account [1..*]
└── O2
├── CA776 : CheckingAccount
│ └── balanceInCents = 200000
├── Customer_1 : Person
│ └── name = "Alex Morgan"
└── holds1 : holds
├── customer → Customer_1
└── account → CA776

The O0, O1, and O2 ordia are ordinary organisational entities. They make the ontological strata easy to see, but they are not separate technical metamodel layers.

6. CHAS — the smallest everyday form

CHAS is compact, hierarchical, abridged, and SUN-based. It is generally the shortest useful rendering for a clade-shaped domain model and is well suited to tutorials, reviews, and human authoring.

In this compact profile, the presence of navigable marks the navigable relationship end. Its omission on customer renders the non-navigable case. This is a compact notation convention; the authoritative substrate value remains isNavigableTo false.

// PAMoLa / Ordium v1.0.0
// AccountModel in CHAS: Compact, Hierarchical, Abridged, SUN references.

EN AccountModel {
EN O0 {
EN AccountType ^2
EN OwnerType ^2
}

EN O1 {
EN Account ^0 {
AT balanceInCents : Integer = 0 {durability=1, mutability=1}
}

EN Person : O0.OwnerType ^1 {
AT name : String {durability=1, mutability=1}
}

EN CheckingAccount : O0.AccountType ^1
EN SavingsAccount : O0.AccountType ^1

CA AccountKinds {
isComplete false
isDisjoint true
IC generalAccount {isGeneralisation true; hasRelatum Account}
IC checking {hasRelatum CheckingAccount}
IC savings {hasRelatum SavingsAccount}
}

RE holds ^1 {
PA customer {hasRelatum Person; [1..1]}
PA account {hasRelatum Account; [1..*]; navigable}
}
}

EN O2 {
EN CA776 : O1.CheckingAccount {
AT balanceInCents : Integer = 200000
}

EN Customer_1 : O1.Person {
AT name : String = "Alex Morgan"
}

RE holds1 : O1.holds {
PA customer {hasRelatum Customer_1}
PA account {hasRelatum CA776}
}
}
}

7. FHAS — the current workhorse

FHAS is full, hierarchical, abridged, and SUN-based. It keeps the custodian tree visible while exposing Core property names. It is the most widely used current profile for fixtures, examples, exchange, and inspection.

// PAMoLa / Ordium v1.0.0
// AccountModel in FHAS: Full, Hierarchical, Abridged, SUN references.
// String-valued properties are quoted; Ordium-valued references are unquoted.

EN {hasName "AccountModel", hasNote "Running example for the PAMoLa HUTN user guide",
EN {hasName "O0",
EN {hasName "AccountType", hasPotency 2},
EN {hasName "OwnerType", hasPotency 2}
},
EN {hasName "O1",
EN {hasName "Account", hasPotency 0,
AT {hasName "balanceInCents", hasDurability 1, hasMutability 1, hasDataType Integer, hasValue 0}
},
EN {hasName "Person", hasPotency 1, hasDeclaredType O0.OwnerType,
AT {hasName "name", hasDurability 1, hasMutability 1, hasDataType String}
},
EN {hasName "CheckingAccount", hasPotency 1, hasDeclaredType O0.AccountType},
EN {hasName "SavingsAccount", hasPotency 1, hasDeclaredType O0.AccountType},
CA {hasName "AccountKinds", isComplete false, isDisjoint true,
IC {hasName "generalAccount", isGeneralisation true, hasRelatum Account},
IC {hasName "checking", isGeneralisation false, hasRelatum CheckingAccount},
IC {hasName "savings", isGeneralisation false, hasRelatum SavingsAccount}
},
RE {hasName "holds", hasPotency 1, hasAssociationName "holds",
PA {hasName "customer", hasRoleName "customer", hasLowerBound 1, hasUpperBound 1, isNavigableTo false, hasRelatum Person},
PA {hasName "account", hasRoleName "account", hasLowerBound 1, hasUpperBound unlimited, isNavigableTo true, hasRelatum Account}
}
},
EN {hasName "O2",
EN {hasName "CA776", hasPotency 0, hasDeclaredType O1.CheckingAccount,
AT {hasName "balanceInCents", hasDurability 0, hasMutability 0, hasDataType Integer, hasValue 200000}
},
EN {hasName "Customer_1", hasPotency 0, hasDeclaredType O1.Person,
AT {hasName "name", hasDurability 0, hasMutability 0, hasDataType String, hasValue "Alex Morgan"}
},
RE {hasName "holds1", hasPotency 0, hasDeclaredType O1.holds,
PA {hasName "customer", hasRoleName "customer", hasRelatum Customer_1},
PA {hasName "account", hasRoleName "account", hasRelatum CA776}
}
}
}

8. FHAN — full syntax with numeric references

FHAN differs from FHAS only in the final axis. The generated labels make every in-document reference unambiguous even when several ordia have the same local name. They are particularly useful in generated fixtures and low-context interchange.

External Core, datatype, and profile references may remain imported symbolic references because they are not ordia declared by this document.

// PAMoLa / Ordium v1.0.0
// AccountModel in FHAN: Full, Hierarchical, Abridged, Numeric references.
// Numeric labels are local to this serialisation; they are not PIDs or hasName values.

EN1 {hasName "AccountModel", hasNote "Running example for the PAMoLa HUTN user guide",
EN2 {hasName "O0",
EN3 {hasName "AccountType", hasPotency 2},
EN4 {hasName "OwnerType", hasPotency 2}
},
EN5 {hasName "O1",
EN6 {hasName "Account", hasPotency 0,
AT1 {hasName "balanceInCents", hasDurability 1, hasMutability 1, hasDataType Integer, hasValue 0}
},
EN7 {hasName "Person", hasPotency 1, hasDeclaredType EN4,
AT2 {hasName "name", hasDurability 1, hasMutability 1, hasDataType String}
},
EN8 {hasName "CheckingAccount", hasPotency 1, hasDeclaredType EN3},
EN9 {hasName "SavingsAccount", hasPotency 1, hasDeclaredType EN3},
CA1 {hasName "AccountKinds", isComplete false, isDisjoint true,
IC1 {hasName "generalAccount", isGeneralisation true, hasRelatum EN6},
IC2 {hasName "checking", isGeneralisation false, hasRelatum EN8},
IC3 {hasName "savings", isGeneralisation false, hasRelatum EN9}
},
RE1 {hasName "holds", hasPotency 1, hasAssociationName "holds",
PA1 {hasName "customer", hasRoleName "customer", hasLowerBound 1, hasUpperBound 1, isNavigableTo false, hasRelatum EN7},
PA2 {hasName "account", hasRoleName "account", hasLowerBound 1, hasUpperBound unlimited, isNavigableTo true, hasRelatum EN6}
}
},
EN10 {hasName "O2",
EN11 {hasName "CA776", hasPotency 0, hasDeclaredType EN8,
AT3 {hasName "balanceInCents", hasDurability 0, hasMutability 0, hasDataType Integer, hasValue 200000}
},
EN12 {hasName "Customer_1", hasPotency 0, hasDeclaredType EN7,
AT4 {hasName "name", hasDurability 0, hasMutability 0, hasDataType String, hasValue "Alex Morgan"}
},
RE2 {hasName "holds1", hasPotency 0, hasDeclaredType RE1,
PA3 {hasName "customer", hasRoleName "customer", hasRelatum EN12},
PA4 {hasName "account", hasRoleName "account", hasRelatum EN11}
}
}
}

9. FLUN — the fullest diagnostic form

FLUN is full, linear, unabridged, and numeric. It is deliberately verbose. Custody is explicit, every ordium displays its tutorial PID and FQN, and virtual defaults such as potency zero, empty notes, Boolean defaults, multiplicity defaults, durability, and mutability are exposed.

The listing does not manufacture absent optional property facts. For example, an entity with no declared ontological type simply has no hasDeclaredType property. This distinction is required by PAMoLa's sparse-edge semantics.

The PIDs below are deterministic values generated for this guide. A real HUTN emitter must preserve the PIDs held by the source model rather than generate these tutorial values.

// PAMoLa / Ordium v1.0.0
// AccountModel in FLUN: Full, Linear, Unabridged, Numeric references.
// Custodianship is explicit. Virtual defaults and identity data are displayed.
// A genuinely absent optional property remains absent: this listing does not invent edges.
// Tutorial PIDs below are deterministic examples; a real emitter preserves model PIDs.

EN1 {
hasName "AccountModel",
hasPID pid:pamola:guide:1270f0b8-e8ac-5c93-a679-92a92d87e502,
hasFQN Ordium.Domain.AccountModel,
hasNote "Running example for the PAMoLa HUTN user guide",
hasCustodian Ordium.Domain,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0
}

EN2 {
hasName "O0",
hasPID pid:pamola:guide:aa916a51-6476-50d7-a07c-b0f5aeceb0af,
hasFQN Ordium.Domain.AccountModel.O0,
hasNote "",
hasCustodian EN1,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0
}

EN3 {
hasName "AccountType",
hasPID pid:pamola:guide:fdc1ef8e-cc74-5cad-9148-f5966a01f1d0,
hasFQN Ordium.Domain.AccountModel.O0.AccountType,
hasNote "",
hasCustodian EN2,
hasLinguisticType Ordium.Core.Entity,
hasPotency 2
}

EN4 {
hasName "OwnerType",
hasPID pid:pamola:guide:884c7ed3-8fda-57d8-bcd7-bda3bd033e0a,
hasFQN Ordium.Domain.AccountModel.O0.OwnerType,
hasNote "",
hasCustodian EN2,
hasLinguisticType Ordium.Core.Entity,
hasPotency 2
}

EN5 {
hasName "O1",
hasPID pid:pamola:guide:1f93b25e-c2e6-5cce-855e-61ae330e46ee,
hasFQN Ordium.Domain.AccountModel.O1,
hasNote "",
hasCustodian EN1,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0
}

EN6 {
hasName "Account",
hasPID pid:pamola:guide:e5714629-308e-5550-a012-4794544f29ee,
hasFQN Ordium.Domain.AccountModel.O1.Account,
hasNote "",
hasCustodian EN5,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0
}

AT1 {
hasName "balanceInCents",
hasPID pid:pamola:guide:32a45f42-ba8a-5369-91fd-8b345f03c0b2,
hasFQN Ordium.Domain.AccountModel.O1.Account.balanceInCents,
hasNote "",
hasCustodian EN6,
hasLinguisticType Ordium.Core.Attribute,
hasDurability 1,
hasMutability 1,
hasDataType Integer,
hasValue 0
}

EN7 {
hasName "Person",
hasPID pid:pamola:guide:f9572c9a-5735-58f2-93b8-61423d842ae7,
hasFQN Ordium.Domain.AccountModel.O1.Person,
hasNote "",
hasCustodian EN5,
hasLinguisticType Ordium.Core.Entity,
hasPotency 1,
hasDeclaredType EN4
}

AT2 {
hasName "name",
hasPID pid:pamola:guide:f03c4367-3f6f-52e4-8dc1-3c3b796e5e4f,
hasFQN Ordium.Domain.AccountModel.O1.Person.name,
hasNote "",
hasCustodian EN7,
hasLinguisticType Ordium.Core.Attribute,
hasDurability 1,
hasMutability 1,
hasDataType String
}

EN8 {
hasName "CheckingAccount",
hasPID pid:pamola:guide:28636ae6-e61f-5308-8159-41d801df272a,
hasFQN Ordium.Domain.AccountModel.O1.CheckingAccount,
hasNote "",
hasCustodian EN5,
hasLinguisticType Ordium.Core.Entity,
hasPotency 1,
hasDeclaredType EN3
}

EN9 {
hasName "SavingsAccount",
hasPID pid:pamola:guide:25de3b67-e9d6-52fc-86cd-416b71131e70,
hasFQN Ordium.Domain.AccountModel.O1.SavingsAccount,
hasNote "",
hasCustodian EN5,
hasLinguisticType Ordium.Core.Entity,
hasPotency 1,
hasDeclaredType EN3
}

CA1 {
hasName "AccountKinds",
hasPID pid:pamola:guide:414deec5-88cd-543e-a56c-595865e90438,
hasFQN Ordium.Domain.AccountModel.O1.AccountKinds,
hasNote "",
hasCustodian EN5,
hasLinguisticType Ordium.Core.Categorisation,
isComplete false,
isDisjoint true
}

IC1 {
hasName "generalAccount",
hasPID pid:pamola:guide:0779c408-d942-5606-acfc-77e1dfaa7d34,
hasFQN Ordium.Domain.AccountModel.O1.AccountKinds.generalAccount,
hasNote "",
hasCustodian CA1,
hasLinguisticType Ordium.Core.Intercalation,
isGeneralisation true,
hasRelatum EN6
}

IC2 {
hasName "checking",
hasPID pid:pamola:guide:2caaf546-3876-598d-b9f8-3c5d0ae4a9c6,
hasFQN Ordium.Domain.AccountModel.O1.AccountKinds.checking,
hasNote "",
hasCustodian CA1,
hasLinguisticType Ordium.Core.Intercalation,
isGeneralisation false,
hasRelatum EN8
}

IC3 {
hasName "savings",
hasPID pid:pamola:guide:029c93a3-fb5f-5b02-938f-586bf6a8068c,
hasFQN Ordium.Domain.AccountModel.O1.AccountKinds.savings,
hasNote "",
hasCustodian CA1,
hasLinguisticType Ordium.Core.Intercalation,
isGeneralisation false,
hasRelatum EN9
}

RE1 {
hasName "holds",
hasPID pid:pamola:guide:1b575c09-864e-5603-b05e-e7157f37b288,
hasFQN Ordium.Domain.AccountModel.O1.holds,
hasNote "",
hasCustodian EN5,
hasLinguisticType Ordium.Core.Relationship,
hasPotency 1,
hasAssociationName "holds"
}

PA1 {
hasName "customer",
hasPID pid:pamola:guide:c1f601bc-8288-54bd-a631-d5dd6ee988e5,
hasFQN Ordium.Domain.AccountModel.O1.holds.customer,
hasNote "",
hasCustodian RE1,
hasLinguisticType Ordium.Core.Participation,
hasRoleName "customer",
hasLowerBound 1,
hasUpperBound 1,
isOrdered false,
isUnique true,
isNavigableTo false,
hasRelatum EN7
}

PA2 {
hasName "account",
hasPID pid:pamola:guide:11228b1f-f611-5a83-bbb8-ef96607a3547,
hasFQN Ordium.Domain.AccountModel.O1.holds.account,
hasNote "",
hasCustodian RE1,
hasLinguisticType Ordium.Core.Participation,
hasRoleName "account",
hasLowerBound 1,
hasUpperBound unlimited,
isOrdered false,
isUnique true,
isNavigableTo true,
hasRelatum EN6
}

EN10 {
hasName "O2",
hasPID pid:pamola:guide:d4fdff5c-385a-5947-9f03-eb1e8d223b77,
hasFQN Ordium.Domain.AccountModel.O2,
hasNote "",
hasCustodian EN1,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0
}

EN11 {
hasName "CA776",
hasPID pid:pamola:guide:886002e6-889f-53ee-9fd7-544623d34157,
hasFQN Ordium.Domain.AccountModel.O2.CA776,
hasNote "",
hasCustodian EN10,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0,
hasDeclaredType EN8
}

AT3 {
hasName "balanceInCents",
hasPID pid:pamola:guide:095602d9-1eef-55a9-b55a-77b868675870,
hasFQN Ordium.Domain.AccountModel.O2.CA776.balanceInCents,
hasNote "",
hasCustodian EN11,
hasLinguisticType Ordium.Core.Attribute,
hasDurability 0,
hasMutability 0,
hasDataType Integer,
hasValue 200000
}

EN12 {
hasName "Customer_1",
hasPID pid:pamola:guide:a929f580-431d-536f-9f22-691cd6eb2cd6,
hasFQN Ordium.Domain.AccountModel.O2.Customer_1,
hasNote "",
hasCustodian EN10,
hasLinguisticType Ordium.Core.Entity,
hasPotency 0,
hasDeclaredType EN7
}

AT4 {
hasName "name",
hasPID pid:pamola:guide:821636ed-2d14-52bc-8e49-db26ba0cf118,
hasFQN Ordium.Domain.AccountModel.O2.Customer_1.name,
hasNote "",
hasCustodian EN12,
hasLinguisticType Ordium.Core.Attribute,
hasDurability 0,
hasMutability 0,
hasDataType String,
hasValue "Alex Morgan"
}

RE2 {
hasName "holds1",
hasPID pid:pamola:guide:dae1de70-732e-55ce-b8dc-bf2c71e32ab7,
hasFQN Ordium.Domain.AccountModel.O2.holds1,
hasNote "",
hasCustodian EN10,
hasLinguisticType Ordium.Core.Relationship,
hasPotency 0,
hasDeclaredType RE1
}

PA3 {
hasName "customer",
hasPID pid:pamola:guide:cd7450e6-0bab-5d84-9017-c5bf2ab4f107,
hasFQN Ordium.Domain.AccountModel.O2.holds1.customer,
hasNote "",
hasCustodian RE2,
hasLinguisticType Ordium.Core.Participation,
hasRoleName "customer",
hasLowerBound 0,
hasUpperBound unlimited,
isOrdered false,
isUnique true,
isNavigableTo true,
hasRelatum EN12
}

PA4 {
hasName "account",
hasPID pid:pamola:guide:47cb9953-dcf2-52bb-9453-26c4a5261259,
hasFQN Ordium.Domain.AccountModel.O2.holds1.account,
hasNote "",
hasCustodian RE2,
hasLinguisticType Ordium.Core.Participation,
hasRoleName "account",
hasLowerBound 0,
hasUpperBound unlimited,
isOrdered false,
isUnique true,
isNavigableTo true,
hasRelatum EN11
}

10. What changes—and what does not

ConcernCHASFHASFHANFLUN
Linguistic categoryBadgeBadgeNumeric label prefixNumeric label prefix plus explicit hasLinguisticType
CustodyNestingNestingNestinghasCustodian
Ordinary propertiesCompact signaturesExplicit property namesExplicit property namesExplicit properties plus defaults/identity detail
Internal referencesSUNSUNNumeric labelsNumeric labels
PID/FQN displayUsually omittedUsually omittedUsually omittedExplicit
Underlying ordiaSameSameSameSame

A profile should never change a domain fact merely to obtain a shorter or prettier rendering. A compact profile may encode the same fact through punctuation or a keyword; an abridged profile may omit a value that its profile reconstructs; and a numeric profile may replace a contextual name with a document-local label. These are representational transformations, not model transformations.

11. Choosing a profile

Use CHAS when people are the main readers and compact notation is familiar. Use FHAS as the default when clarity, explicit property names, and readable references matter. Use FHAN when generated labels make cross-references safer than contextual names. Use FLUN for debugging, conformance work, migrations, audits, and questions about the exact custody or effective default values.

A practical workflow is:

author or review in CHAS/FHAS

parse to the authoritative PAMoLa clade

emit FHAS for ordinary exchange

emit FHAN or FLUN when diagnosing identity, custody, or resolution

12. Rules are HUTN content too

HUTN is not limited to class-diagram-like content. PAMoLa rules are represented by ordinary behavioural ordia—principally AO, PM, and AG—and can therefore be rendered in the same notation.

A small structural rendering of Clabject(X) :- Entity(X). is:

// Clabject(X) :- Entity(X).
AO {hasName "Clabject", hasPredicate Ordium.Core.Clabject,
AG {hasName "headX", bindsTo X, fills X},
AO {hasName "bodyEntity", hasPredicate Ordium.Core.Entity,
AG {hasName "bodyX", bindsTo X, fills X}
},
PM {hasName "X", hasType Ordium}
}

A head atom may custody body atoms; a follows chain can order conjunctive body atoms; shared parameters connect argument occurrences. The same rule content can consequently be inspected as HUTN, exposed as facts about the rule structure, or compiled into executable rule form.

13. Round-trip expectations

A successful HUTN round trip preserves model identity and meaning, subject to the selected profile's declared canonicalisation rules.

  • The parser must resolve every SUN or numeric label unambiguously.
  • PIDs already present in the model must remain stable.
  • FQNs must agree with the current name and custodian path.
  • Abridgement must reconstruct only declared defaults or profile-defined sugar.
  • Explicit unknown and undefined values must not be confused with absence.
  • A HUTN ware may canonicalise scalar lexemes while preserving their typed value; exact byte preservation and exact value preservation are distinct guarantees.
  • Unsupported or ambiguous input should fail loudly rather than produce a plausible but incorrect clade.

14. Reading older HUTN material

Pre-v1.0.0 documents remain useful didactically, but their badges, property names, and terminology must not be copied directly into current files.

Pre-v1.0.0 wording or constructv1.0.0 form
NestedHierarchical
FlatLinear
Non-abridged / explicitUnabridged
Symbolic reference modeSUN reference mode
CR / CNCA / IC
participant or isConnectedTohasRelatum
hasType on an AThasDataType
IN used for an intercalationIC; IN now denotes Invocation
followsInListRemoved; use follows only for an actually asserted sequence
isOfKindRemoved from the Core representation; use profiles/markers where such an interpretation is needed
§ embedded in namesNot permitted by the v1.0.0 name grammar
Unquoted string-valued hasNameQuote it, for example hasName "Person"

The current Core seed is authoritative whenever an old guide, paper, example, or implementation disagrees with v1.0.0.

15. Summary

HUTN is best understood as a family of textual projections over PAMoLa clades. Its four independent axes let a user choose between compactness and explicitness, nested and linear custody, abridged and diagnostic detail, and human-readable or generated references.

For most work:

  • start with FHAS;
  • choose CHAS when compact human authoring matters;
  • choose FHAN when local numeric references are safer; and
  • choose FLUN when nothing should remain implicit except genuinely absent facts.

The textual forms differ. The authoritative PAMoLa content does not.