Skip to content
🚧 Early alpha — building the foundation. See the roadmap →

Crosswalk link sets record their producer; a detail change is never refreshed in place

Created Updated

A framework whose source rows carry crosswalk columns writes two things: its concept notes, and a set of crosswalk link notes per column. Until now every run minted a new link set, so each refresh left a duplicate set of links behind. Link notes now record which framework import set produced them (plain: the owner of the run that wrote them). A refresh finds its links by that recorded fact and updates them in place. Separately, the owner confirmed that re-running a stack at a different detail level stays a new set, never an in-place refresh.

Synthetic framework set iset-aaaaaa has a column mapping its controls to a second framework. The first run writes link set iset-bbbbbb, and every link note in it carries import_set.parent_set: iset-aaaaaa. Refreshing iset-aaaaaa from an updated source looks for sets whose only recorded producer is iset-aaaaaa and whose recipe is that column’s recipe. It finds exactly iset-bbbbbb and updates it where it lives. Link ids stay the same.

#DecisionWhy
1Record the producer as data: optional _crosswalker.import_set.parent_set, written on crosswalk link notes only (SchemaVer 1.5.0, additive)Identity, never path: folder, label or recipe id alone cannot name an owner
2Exactly one matching set is reused; two or more block that column with an actionable error; zero mints a new stamped setRefresh is chosen, never guessed: ambiguity is surfaced, not resolved by picking one
3Link sets written before this change are never adopted; the first refresh mints one stamped setAdopting an unstamped set would be a guess from recipe id
4A reused set is written where it lives (its recorded destination), not to the default folderA moved set must not be split across two folders
5Skip leaves existing links untouched; Replace reconnects links to concepts imported laterSkip used to reconnect only as a side effect of the duplicate set
6A stack Run again at a different detail level offers only New set, with the existing guard message. Refresh in place is not offered for a detail changeOwner decision. Narrowing in place would leave notes the new detail no longer produces as orphans in a set that claims the new detail; a new set keeps both honest
OptionResult
Keep blocked (chosen)No code change; the old set stays intact beside the new one
Allow refresh, report orphansOne set, but stale notes linger as orphans until cleaned up
Allow widening onlyAdds notes safely, but splits the rule by direction; more to explain