Crosswalk link sets record their producer; a detail change is never refreshed in place
1. In one breath
Section titled “1. In one breath”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.
2. Example
Section titled “2. Example”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.
3. Decisions
Section titled “3. Decisions”| # | Decision | Why |
|---|---|---|
| 1 | Record 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 |
| 2 | Exactly one matching set is reused; two or more block that column with an actionable error; zero mints a new stamped set | Refresh is chosen, never guessed: ambiguity is surfaced, not resolved by picking one |
| 3 | Link sets written before this change are never adopted; the first refresh mints one stamped set | Adopting an unstamped set would be a guess from recipe id |
| 4 | A reused set is written where it lives (its recorded destination), not to the default folder | A moved set must not be split across two folders |
| 5 | Skip leaves existing links untouched; Replace reconnects links to concepts imported later | Skip used to reconnect only as a side effect of the duplicate set |
| 6 | A 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 change | Owner 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 |
4. Options considered for decision 6
Section titled “4. Options considered for decision 6”| Option | Result |
|---|---|
| Keep blocked (chosen) | No code change; the old set stays intact beside the new one |
| Allow refresh, report orphans | One set, but stale notes linger as orphans until cleaned up |
| Allow widening only | Adds notes safely, but splits the rule by direction; more to explain |
Related
Section titled “Related”- Machine contract: v0.1 schema spec
- Terms: import set, terminology
- Superseded deferral: deeper reification and import control synthesis §5.3
- Rules applied: import set = ownership, re-import is identity reconciliation
- Pillars: vision, what makes Crosswalker unique