Preference-Aware Notification Fanout — history
The dated record of how Preference-Aware Notification Fanout got here, moved out of the spec on 2026-10-21 because a reader does not need it to use the spec today. The spec keeps every section spec-format.md requires and its Deleted: tombstones; everything smaller is in git log -- compositions/preference-aware-notification-fanout.md.
Decisions
Entries that record a migration rather than a turn the pattern took.
- 2026-09-23 — Rewritten in GRACE lang v0.61; two of four open Ledger lines closed by the rules that now own them. Chose:
Composes,Composition state,Capability requirement— which takes the prose’s Configuration whole —Primitive policy,Action wiring,Wiring decisionandReconciliationas the surfaces, with the precedence table as its ownShaping gatefamily and the replay procedure asVerdict replay; invariant numbers 1 through 5 and 7 through 10 unchanged, Invariant 6 tombstoned to Composes 5 and its store-write limits kept as Composes 7 through 10; the checks renumberedCheck 1.1throughCheck 6.1;Non-goalsandEdge casessplit, withClock semantics,Concurrency,Payload retention,Per-channel capsandStalenessunder the second; the host’s per-disposition section named an exclusion, since the grammar owns section. The lines’ fixes: the overshoot record’s undefined action field dropped, a detector taking no action to name (2026-08-30-a); a hold retry horizon declared, past which a hold suppression is not retryable, and payload retention bounded by the later of it and the reconciliation window (2026-08-30-c). Over: the prose spec. Because: the migration plan, and the standing rule that a migration closes a line only where a rule now owns what the line asked for. Two stay open: the orphan lookup’s constituent home, which waits on the Reverse Index pattern (2026-08-30-b), and the model (2026-08-30-d).