feat: tombstones, identity paths, and substitution in filterIncludes (#409)
filterIncludes now produces tombstones (~name, meta.excluded) for
excluded includes instead of silently dropping them. Tombstones are
empty aspects harmless to module but visible to trace/debug adapters.
Substituted includes produce a tombstone for the original plus the
replacement, enabling both to appear in traces.
New adapters:
- aspectPath: derive identity from name + provider (replaces == on
aspects)
- excludeAspect: exclude by aspect reference via path comparison
- substituteAspect: substitute by aspect reference via mapAspect + path
- tombstone: create a tombstone from a resolved aspect (exported
utility)
authored by