0.53.0
Added
-
aep plan artifact unrelate <id> <relation> <target>takes an edge back.relatehad no opposite, so an edge asserted in error was permanent:9da4f51c#495found a staledepends_onfrom phase 1 to phase 0 and left it in the store because there was nothing to type. Both ofrelate's spellings work — three positionals, or<relation>:<target>split at the first colon — which is the same one spelling for an edge, now in both directions. The flataep artifact unrelateand theprotocolalias reach the same leaf, byte for byte.Exactly the edge named goes. The markdown backend's rule has always been that frontmatter is added to and not rewritten, because rewriting it from the contract's view would delete every edge somebody wrote into a document by hand; a removal therefore takes out the one
(relation, target)pair on the one artifact and leaves the rest of therelations:list alone.An edge that is not there is refused, naming the ones that are, and the refusal writes nothing — not the document, not the journal. The journal gains an
unrelatedchange of its own rather than recording the write as a body replacement, sohistoryreadsno longer <relation> <target>and the earlierrelatedentry stays exactly where it was.
Fixed
relatemaking an edge that had been taken back is no longer a silent replay. The idempotency key was derived from the edge alone, so a store that keeps applied commands — SQLite and Postgres do, markdown does not — recognised the secondrelate story:x depends_on story:yas the first one being retried and wrote nothing. Unreachable untilunrelateexisted, and reachable the moment it did. The key now names the attempt as well as the edge, which is whatmove,bodyandevidencealready did.