This page describes intended behaviour or structure. No implementation is claimed unless a section is explicitly marked Current implementation or Evidence.
Everything the Factory produces or needs to keep as content is an artifact: documents, code and change sets, reports, logs, adapter checkpoints, release manifests, evaluation records, prompts and model outputs, export packages. ArtifactService stores content once by hash, records who produced it (run, attempt, agent), what it derived from (lineage edges to artifacts, chunks, context snapshots and receipts) and where it sits in a version chain; it renders previews and version history as projections. Because prompts and model outputs are artifacts, no other service ever holds content in its rows (D31).
It absorbs LineageService, VersioningService, ArtifactPreviewService and ArtifactMemoryService from the June-2026 catalog.
flowchart LR
S["ArtifactService"]
AgentRuntimeService["AgentRuntimeService"] -->|grpc| S
ModelRouterService["ModelRouterService"] -->|grpc| S
KnowledgeIngestionService["KnowledgeIngestionService"] -->|grpc| S
ContextBuilderService["ContextBuilderService"] -->|grpc| S
StudioBff["StudioBff"] -->|sync-http| S
S -->|grpc| PolicyEngineService["PolicyEngineService"]
S -->|grpc| CostUsageService["CostUsageService"]
S -->|event| AuditService["AuditService"]
S -. "ArtifactStored" .-> E_ArtifactStored(("event"))
S -. "ArtifactValidated" .-> E_ArtifactValidated(("event"))
S -. "ArtifactSuperseded" .-> E_ArtifactSuperseded(("event"))
S -. "ArtifactDeleted" .-> E_ArtifactDeleted(("event"))
Artifact — An immutable content object addressed by hash with metadata, classification, access scope, producer (run, attempt, agent), inputs it derived from and the version chain it belongs to (artifact-v1). (catalog entry)
Field
Type
Required
Description
artifactId
guid
yes
tenantId
string
yes
projectId
string
yes
kind
enum:ArtifactKind
yes
name
string
yes
contentHash
hash
yes
contentRef
string
yes
Blob reference in artifact-blob.
sizeBytes
long
yes
mediaType
string
yes
classification
string
yes
accessScope
json
yes
Who may read beyond the project scope.
producerRunId
guid
no
producerAttemptId
guid
no
producerAgentId
string
no
chainId
guid
yes
Version chain this artifact belongs to.
versionInChain
int
yes
state
enum:ArtifactState
yes
validationRef
string
no
createdAt
datetime
yes
Invariants:
Content is immutable; a new content hash is a new artifact and a new version in its chain.
Every artifact produced by a run records the run, attempt and agent; every derived artifact records its inputs as lineage edges.
Deleting an artifact (D31) removes content and keeps metadata and lineage marked Deleted so that references stay explainable.
Content lives in artifact-blob under the tenant's region with encryption at rest; metadata and lineage in knowledge-sql. Deletion removes content and keeps the metadata row marked Deleted so that lineage stays explainable; export packages are themselves artifacts of kind Export.
ConnectSoft.Extensions.DataStorage.Abstractions and its file-system provider exist as the storage port; no artifact registry, lineage or version chain exists.
Semantic (not textual) diff between artifact versions; content-addressed deduplication across tenants where classification allows; signed artifacts for release manifests and evaluation records.