Changelog
FTL follows Semantic Versioning for the whole standard release. Versioned JSON under
/api/vX.Y.Z/ is immutable once released; /api/latest/ reflects the newest published release.
v1.0.0 — first stable release
Released: 2026-10-05.
This release freezes the current writing rules, terminology model, general-language vocabulary, German/English policy, and examples as the first stable FTL baseline. It includes the breaking API changes below and the additions recorded in the repository changelog.
- Writing rules now include explicit logical relationships, risk and consequence statements, capacity dimensions, and logistics/electric-charging distinctions.
- Terminology includes explicit adoption status, namespace-qualified semantic identity, semantic relationships, and German translation relations.
- Machine-readable resources are available under
/api/v1.0.0/and/api/latest/.
This is a major release because the terminology API has incompatible changes. Consumers of
/api/latest/terms.json must migrate to the canonical, external, informative, and
deprecated status values; namespace-qualified identities; and German translation relations.
v0.1.0 — initial draft baseline
This was the original draft baseline and was not publicly released as an immutable version.
This is the first baseline. It is intentionally small so that every rule and every term can be reviewed completely.
Content
- Introduction and principles (9 principles).
- 31 writing rules, split into authoring rules (FTL-A01 … FTL-A24) and transformation rules (FTL-T01 … FTL-T07).
- Normative language definitions (RFC 2119 / RFC 8174).
- General-language vocabulary (24 entries) for ordinary technical English, with schema and
machine-readable output at
/api/latest/general-language.json. - German/English policy.
- Terminology entries across electrical/battery, charging, logistics, operations, and software contexts, including explicit distinctions between logistics batches, cargo loading, and electric charging.
- 6 before/after examples.
- Machine-readable JSON at
/api/latest/and/api/v0.1.0/.
Breaking change: terminology status model
The terminology status field was migrated from the overloaded values normative and informative
to a Fenexity-local adoption model:
canonical Fenexity has explicitly adopted this as its preferred terminology
external the term belongs primarily to an external standard; Fenexity preserves it in
that context but does not claim ownership
informative reference-only vocabulary, not currently controlled as Fenexity canonical
deprecated previously used terminology that should not be introduced in new contentMigration criteria (mechanical, auditable):
normativewith only a Fenexity source and no external authority →canonical.normativewith any external standard source →external(the source is authoritative, not the Fenexity status).informative→ unchanged.- No terms were marked
deprecatedin this migration.
Counts before and after (794 terms):
before: normative 788, informative 6
after: canonical 14, external 774, informative 6, deprecated 0This is a breaking API change: consumers of /api/latest/terms.json must expect the four new
status values and can no longer rely on normative or informative alone. The
schemas/terminology.schema.json status enum was updated accordingly. The migration was
mechanical; it does not claim that the 14 canonical terms were individually semantically reviewed
beyond applying the stated source-based criterion.
Breaking change: terminology namespace model
Every term now carries a namespace field. (namespace, id) is the stable semantic identity, and
semantic_id is generated as namespace:id and included in the JSON API. Identical human labels
are permitted in different namespaces (for example ocpp:information-model and
opcua:information-model, or ocpi:session and opcua:session).
Namespaces in use: fenexity, ocpp, opcua, ocpi, vdv, iec60870, openadr, en16931,
oscp, iso15118, din-spec-70121, iec61851, iec62682, iec60050, iec62620, iso50001,
iso9241, siri, netex.
To make collisions explicit, five OPC UA term ids were renamed to their plain form
(information-model-opcua → information-model, opc-ua-variable → variable,
opc-ua-session → session, opc-ua-alarm → alarm, opc-ua-subscription → subscription).
Cross-namespace references in distinguish_from and converges_with now use namespace:id
where the bare id would be ambiguous. Existing human URLs that used the old OPC UA anchor ids no
longer resolve.
Eleven terms have namespace_review: true because their source metadata spans multiple standards
and the primary namespace required a decision:
stop-point, cpo, charge-capacity, v2x, der, configuration, evse,
charging-session, value-added-service, alarm, warning.
This is a breaking API change: /api/latest/terms.json now includes namespace and semantic_id,
and the schema requires namespace.
Breaking change: German translation relations
Every German term (term.de) now carries a translation.de.relation that records how strongly the
German expression corresponds to the underlying concept:
exact same concept, no material semantic qualification
preferred_translation preferred Fenexity German expression, practices may vary
context_dependent only in specified contexts, or can collide with other concepts
no_exact_equivalent no concise German expression maps cleanly; preserve English or explainMigration: terms whose German string is not shared with another concept were assigned
preferred_translation; the 48 terms whose German string collides with another concept were
assigned context_dependent with a note. connector/plug (both “Stecker”),
alarm (IEC 62682 vs OPC UA, both “Alarm”), and the other colliding pairs are never marked exact.
no_exact_equivalent is allowed without a German term.
This is a breaking API change: /api/latest/terms.json now includes translation with the German
relation and note, and the schema requires relation whenever term.de is present.
Versioning policy
PATCH wording clarification that does not intentionally change meaning
MINOR new rules, new terms, new aliases, new examples
MAJOR an incompatible change to an established rule or canonical meaning