Modular, context-aware and aspect-oriented dendritic Nix configurations. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/ den.oeiuwq.com
configurations den dendritic nix aspect oriented
8
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: tombstones record excludedBy for provenance tracking (#420)

Tombstones now carry meta.excludedBy — the name of the aspect whose
meta.adapter caused the exclusion. Combined with the existing
meta.provider (structural origin from provides chain), tombstones
clearly document both who defines an aspect and who excluded it.

Tombstone meta fields:
- provider — who defines this aspect (provides chain)
- excludedBy — who excluded it (adapter source)
- originalName — display name before ~prefix
- replacedBy — replacement name (substitutions only)

authored by

Jason Bowman and committed by
GitHub
3828d77a afbe47f1

+11 -2
+11 -2
nix/lib/aspects/adapters.nix
··· 66 66 # Empty aspect marking an excluded include. ~prefix prevents accidental 67 67 # name collisions with live aspects. Harmless to module, visible to trace. 68 68 # Consumers should check meta.excluded before accessing other aspect fields. 69 + # Tombstone fields: 70 + # meta.excluded — true 71 + # meta.originalName — display name before ~prefix 72 + # meta.provider — who defines this aspect (structural origin, from provides chain) 73 + # meta.excludedBy — who excluded it (the aspect whose meta.adapter caused exclusion) 74 + # meta.replacedBy — name of the replacement (for substitutions only) 69 75 tombstone = 70 76 resolved: extra: 71 77 let ··· 115 121 probed = probeTransform metaAdapter args resolved; 116 122 in 117 123 if result == { } then 118 - [ (tombstone resolved { }) ] 124 + [ (tombstone resolved { excludedBy = aspect.name or "<anon>"; }) ] 119 125 else if aspectPath probed != aspectPath resolved then 120 126 [ 121 - (tombstone resolved { replacedBy = probed.name or "<anon>"; }) 127 + (tombstone resolved { 128 + excludedBy = aspect.name or "<anon>"; 129 + replacedBy = probed.name or "<anon>"; 130 + }) 122 131 probed 123 132 ] 124 133 else