0.1.5 — 2026-05-05
Artefact.is_artefact?/1,Artefact.is_valid?/1,Artefact.validate/1,Artefact.validate!/1— public validation API. Closes #26, #27Artefact.UUID.valid?/1— UUIDv7 format predicate; used internally by validation and exposed for callers- All public ops (
new/1,compose/3,combine/3,harmonise/4,graft/3) now validate their input artefacts and validate the produced artefact before returning — corruption fails at the call site rather than several steps downstream. Closes #30 (empty/invalid uuid rejected at op input), #24 (non-list:labelsrejected at op input) Artefact.graft/3enforces the no-new-islands rule — every new node inargsmust reach a bind-only key viaargs.relationships; raisesArgumentErrorlisting orphan keys otherwise. Closes #29- Validation rule-set: artefact uuid is UUIDv7; node uuid is UUIDv7; node
:labelsis a list of strings; node:propertiesis a map; relationship:typeis a non-empty string; relationship:from_id/:to_idreference an extant node; node uuids, node ids and relationship ids are unique within the graph
0.1.4 — 2026-05-05
Artefact.graft/3— pipeline-friendly convenience for extending an artefact with new nodes and relationships declared inline (same shape asArtefact.new); every node in args MUST carry:uuid(no auto-find — uuid is the binding); nodes whose uuid lives in left bind to it (labels unioned, properties merged left-wins), nodes with new uuids are added; opts honour:titleand:description; raisesArgumentErrorfor missing uuid, duplicate keys, or relationship referencing an unknown key; records:graftedprovenance source
0.1.3 — 2026-04-30
Artefact.Mermaid.export/2— derives Mermaidgraphsource from an%Artefact{}, alongsideArtefact.CypherandArtefact.Arrows; nodes render as circles,:directionoption for:LR,:RL,:TB,:BT,:TD:descriptionfield on%Artefact{}— optional human-readable description, defaults tonil; accepted byArtefact.new/1and round-tripped throughArtefact.Arrows- Mermaid front-matter
title:(Mermaid 9.4+ heading) and bodyaccTitle:derived fromartefact.title;accDescr:derived fromartefact.description(inline form for single-line, block formaccDescr { ... }for multi-line) Artefact.combine/3— pipeline-friendly convenience overArtefact.Binding.find/2+Artefact.harmonise/4; the heart flows through the pipe as the first argument, opts honour:title,:base_labeland:descriptionoverrides; raisesMatchErrorwhen no shared bindings exist
0.1.2 — 2026-04-21
- Improved
Artefact.new/1macro — nodes and relationships declared inline with atom keys and keyword options Artefact.Cypher.merge_params/1— parameterised MERGE returning{cypher, params}for driver useArtefact.Cypher.create_params/1— parameterised CREATE returning{cypher, params}Artefact.Binding.find/2— finds shared nodes between two artefacts by uuid for harmonisationArtefact.harmonise/3macro — merges two artefacts on shared node bindings; left argument is heartside
0.1.1 — 2026-04-01
Artefact.Arrows— lossless round-trip with Arrows JSON (from_json/2,to_json/1)Artefact.Cypher— inlinecreate/1andmerge/1Cypher string generation%Artefact{},%Artefact.Graph{},%Artefact.Node{},%Artefact.Relationship{}structsArtefact.compose/2— combines two artefacts into one graph