Class: SpecArtifact
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:22
An artifact file within a spec directory or a change directory.
Holds the filename, raw file content, and an optional originalHash
that acts as a version token for optimistic concurrency control.
Lifecycle of originalHash:
- When a repository loads an artifact from storage, it computes
sha256(content)and passes it asoriginalHash. - When a use case produces a derived artifact,
it propagates the
originalHashfrom the source artifact so the token survives the transformation. - When a repository saves a derived artifact, it re-hashes the current
file on disk and compares against
originalHash. If they differ, the file was modified between load and save — the write is rejected to prevent silently discarding concurrent changes (e.g. those made by an LLM agent writing to the same file). originalHashisundefinedfor artifacts that were never read from storage (e.g. scaffolded for the first time). In that case the repository performs no conflict check.
Constructors
Constructor
new SpecArtifact(
filename,content,originalHash?):SpecArtifact
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:37
Creates a new SpecArtifact.
Parameters
filename
string
The artifact filename (e.g. "spec.md", "proposal.md")
content
string
The raw file content
originalHash?
string
The sha256:<hex> hash of the content as it existed
in storage when this artifact was loaded. Pass undefined for artifacts
that have no prior storage representation (first write / scaffold).
Returns
SpecArtifact
Accessors
content
Get Signature
get content():
string
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:49
The raw file content of the artifact.
Returns
string
filename
Get Signature
get filename():
string
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:44
The artifact filename (e.g. "spec.md").
Returns
string
originalHash
Get Signature
get originalHash():
string|undefined
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:64
The sha256:<hex> hash of the content as it existed in storage when
this artifact was loaded, or undefined if the artifact has no prior
storage representation.
Used by repository implementations to detect concurrent modifications: before writing, the repository hashes the current file on disk and compares against this value. A mismatch means another writer (e.g. an LLM agent) modified the file after this artifact was loaded, and the save should be rejected to avoid a lost update.
Returns
string | undefined
Methods
section()
section(
name):string|null
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:132
Returns the body of a single section by name, or null if not present.
Parameters
name
string
The section heading text (without the ## prefix)
Returns
string | null
The trimmed section body, or null if the section does not exist
sections()
sections():
Map<string,string>
Defined in: packages/core/src/domain/value-objects/spec-artifact.ts:76
Parses the content into a map of ## Section Name → section body.
Only level-2 headings (##) are treated as section delimiters.
The body of each section is trimmed of leading/trailing whitespace.
Returns
Map<string, string>
A Map from section name to trimmed section content