You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ADR-0030 still prescribes migrateSysNotificationToEvent, a call the #16194 retirement removed — an operator copying step 2 gets an unresolvable import #17193
docs/adr/0030-notification-platform-convergence.md carries a live operator prescription for a function that no longer exists:
docs/adr/0030-notification-platform-convergence.md:105
- Run `migrateSysNotificationToEvent` during the cut-over so historical bell rows
carry over. **Sequence:** ship back-end → run migration → flip UI (runbook in the
handoff doc).
migrateSysNotificationToEvent was removed from @objectstack/metadata/migrations by the #16194 retirement (director-seat ruling, decision batch #88, 2026-09-08). An operator following that line writes an import that does not resolve — a copy-the-example-and-it-fails defect, not a stylistic one.
A second occurrence, :80, is a historical record and is fine as it stands — the P0 — Seams table describes what was built under #1434, and it was built. Only :105 is addressed to someone about to act.
Amending an ADR is a decision, not a tidy-up (Prime Directive [WIP] Add Chinese version of the documentation #13). The retirement ruling withdrew the migration; it did not say anything about ADR-0030's own status line. Whether :105 is struck, rewritten to say the step is gone, or left under an amended status line pointing at the retirement is a call for whoever owns that record.
The operator-facing half was fixed in the #16194 PR, because it is not governed: docs/handoff/adr-0030-notification-convergence.md — the runbook ADR-0030 itself defers to ("runbook in the handoff doc") — now carries a tombstone where its step 2 was, stating that pre-ADR-0030 sys_notification rows are not carried by the platform on this line, and naming the reversal path. So the doc an operator is actually sent to is correct today; this card is about the record that points at it.
Suggested shape of the fix
A docs-only PR touching docs/adr/0030-notification-platform-convergence.md alone, merged by hand:
Measured on origin/main at fd5cff209f plus the #16194 branch head bb65e0f298:
git grep -n migrateSysNotificationToEvent -- docs/ returns docs/adr/0030-notification-platform-convergence.md:80, :105, and the handoff doc's tombstone line.
After the retirement, git grep -nE 'export [^;]*migrateSysNotificationToEvent' over the tree (excluding CHANGELOGs and release notes) returns zero — nothing re-exports it under any spelling. The same expression at the merge base returns the four declarations, so the probe fires.
Related: #16194 (the retirement) · #15710 (the receipt contract it withdrew) · #14025 (the id's registration).
What is wrong
docs/adr/0030-notification-platform-convergence.mdcarries a live operator prescription for a function that no longer exists:migrateSysNotificationToEventwas removed from@objectstack/metadata/migrationsby the #16194 retirement (director-seat ruling, decision batch #88, 2026-09-08). An operator following that line writes an import that does not resolve — a copy-the-example-and-it-fails defect, not a stylistic one.A second occurrence,
:80, is a historical record and is fine as it stands — theP0 — Seamstable describes what was built under #1434, and it was built. Only:105is addressed to someone about to act.Why it is not fixed in the #16194 PR
Two independent reasons, both structural:
docs/adr/**is a governed surface (Prime Directive feat: Comprehensive CRM example demonstrating all ObjectStack protocol features #14). One path hit makes a whole diff governed, and the directive's own remedy for that is to split the governed files into their own PR rather than drag an otherwise-ordinary change into hand-merge-only territory. The Theadr-0030-notification-eventmigration has no operator path: no production caller and noos migratesub-command, while its two sibling attested ids have both #16194 PR is already parked outside the queue awaiting aCONTRACT_REVIEW_TIERpass; adding a second, unrelated landing constraint to it helps nobody.:105is struck, rewritten to say the step is gone, or left under an amended status line pointing at the retirement is a call for whoever owns that record.The operator-facing half was fixed in the #16194 PR, because it is not governed:
docs/handoff/adr-0030-notification-convergence.md— the runbook ADR-0030 itself defers to ("runbook in the handoff doc") — now carries a tombstone where its step 2 was, stating that pre-ADR-0030sys_notificationrows are not carried by the platform on this line, and naming the reversal path. So the doc an operator is actually sent to is correct today; this card is about the record that points at it.Suggested shape of the fix
A docs-only PR touching
docs/adr/0030-notification-platform-convergence.mdalone, merged by hand::105so it records that the migration step existed and was later withdrawn (retirement under Theadr-0030-notification-eventmigration has no operator path: no production caller and noos migratesub-command, while its two sibling attested ids have both #16194), pointing at the handoff doc's tombstone for what a deployment gets instead;:80as the historical seams record;Evidence
Measured on
origin/mainatfd5cff209fplus the #16194 branch headbb65e0f298:git grep -n migrateSysNotificationToEvent -- docs/returnsdocs/adr/0030-notification-platform-convergence.md:80,:105, and the handoff doc's tombstone line.git grep -nE 'export [^;]*migrateSysNotificationToEvent'over the tree (excluding CHANGELOGs and release notes) returns zero — nothing re-exports it under any spelling. The same expression at the merge base returns the four declarations, so the probe fires.Related: #16194 (the retirement) · #15710 (the receipt contract it withdrew) · #14025 (the id's registration).