Reference Documentation - Specification
Cognitive Extension / Shared Infrastructure
Defines the Semantic Extended Artifact Token (Identity Token) — a semantic identity primitive that provides unique identity, provenance, versioning, and ownership for SEA™ artifacts, governed by DomainForge™ SEA™ DSL.
Terminology Note: This project uses “Identity Token” and “Provenance Token” rather than “NFT” to clarify these are immutability/provenance primitives, not public-chain assets. There are no execution fees, execution costs, or token economics.
Identity Tokens are not cryptocurrencies. They are semantic identity objects that map intellectual, cognitive, and informational artifacts to a cryptographic ledger (IFL).
They allow SEA™ to describe:
Identity Tokens are defined as first-class semantic entities in the DomainForge™ SEA™ DSL.
1
2
3
4
5
6
7
8
9
10
11
Concept: IdentityToken
is a: Semantic Asset
has: Unique Identifier
has: Artifact Type
has: Version
has: Immutable Hash
has optional: Metadata Block
has: Owner
has: State
may have: Lineage Specification
may have: Public Anchor
1
2
3
Concept: Artifact Type
examples: CALMModel, SemanticVersion, OntologyVersion,
CognitiveArtifact, InformationProduct, SourceCodeArtifact
1
2
3
4
5
Concept: Lineage Specification
has optional: Derived From (0..n IdentityToken)
has optional: Supersedes (0..1 IdentityToken)
has optional: Composes (0..n IdentityToken)
has optional: Manifests Into (0..n IdentityToken)
1
2
3
Concept: Token Ownership
has: Owner (Actor)
has: Assigned Permissions
IdentityToken has Artifact Type.IdentityToken has Version.IdentityToken is owned by Actor.IdentityToken has Immutable Hash.IdentityToken has Metadata.IdentityToken has Lineage Specification.IdentityToken is anchored by Ledger Entry.IdentityToken may reference Public Anchor.These policies are enforced by the IFL ↔ DomainForge™ Adapter running the SEA™ DSL Policy Engine.
It is obligatory that every IdentityToken has exactly one Owner.
It is necessary that the Immutable Hash of an IdentityToken never changes.
It is obligatory that every IdentityToken with a Version greater than 1 has a Derived From lineage pointing to at least one prior IdentityToken.
It is permitted that an Actor updates Metadata of an IdentityToken only if the Actor has Update Permission.
It is forbidden that an Actor changes the Owner of an IdentityToken unless the Actor has Ownership Transfer Permission.
It is necessary that a CALM Model IdentityToken is in an Approved state before Deployment.
It is permitted that an IdentityToken has one or more Public Anchors. It is necessary that Public Anchors reference only Merkle Root Checkpoints.
The following template syntax illustrates how Identity Tokens are defined in the DSL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Template IdentityToken<ArtifactType> {
key: id
fields:
id: Identifier
type: ArtifactType
version: VersionIdentifier
hash: Hash
owner: Actor
metadata: MetadataBlock
lineage: LineageSpecification?
permissions: PermissionBlock
state: TokenState
}
Template LineageSpecification {
fields:
derivedFrom: IdentityToken[]?
supersedes: IdentityToken?
composes: IdentityToken[]?
manifestsInto: IdentityToken[]?
}
Constraints are programmatically enforceable invariants:
1
2
3
4
5
6
7
8
Constraint Block IdentityToken {
invariants:
hash is immutable check on update
version is monotonically increasing check on create
owner must be valid Actor
type must be recognized ArtifactType
lineage.derivedFrom must reference lower versions
}
A DSL-Version must be represented by an IdentityToken of type SemanticVersion.
A CALMModel is deployed only if its IdentityToken.state = Approved.
Every OntologyVersion must be represented by an IdentityToken and anchored in the IFL.
Used by the IFL Node API and Client SDKs.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
interface IdentityTokenDto {
id: string;
artifactType:
| "CALMModel"
| "SemanticVersion"
| "OntologyVersion"
| "CognitiveArtifact"
| "InformationProduct"
| "SourceCodeArtifact";
artifactId: string;
version: string;
hash: string;
owner: string;
state: "Draft" | "Approved" | "Deployed" | "Retired";
lineage?: {
derivedFrom?: string[];
supersedes?: string;
composes?: string[];
manifestsInto?: string[];
};
metadata?: Record<string, unknown>;
}