Gap
deprecated and replacedBy are registered documentation common-attrs in all five ports — and nothing reads them. No validation pass, no verify check, no codegen behavior.
A deprecation you cannot enforce is a comment.
Prior art (open source)
dbt pairs deprecation with a date, so a model can be marked as going away on a schedule rather than indefinitely. https://docs.getdbt.com/reference/dbt_project.yml
Direction
Smallest useful version, using vocabulary that already ships:
verify warns when a node depends on a deprecated node (via extends, @objectRef, @references, origin @from/@of/@via).
- Where
replacedBy is present, name the replacement in the diagnostic.
- Optionally, a deprecation date that escalates warn → error once passed.
Interacts with #4 (severity + suppressions): the escalation story is much better if a project can suppress a specific deprecation with a recorded reason while it migrates.
Notes
- Additive and opt-in: a model with no
deprecated attrs sees no diagnostics.
- Needs cross-port conformance so a deprecation warns identically everywhere.
Gap
deprecatedandreplacedByare registered documentation common-attrs in all five ports — and nothing reads them. No validation pass, noverifycheck, no codegen behavior.A deprecation you cannot enforce is a comment.
Prior art (open source)
dbt pairs deprecation with a date, so a model can be marked as going away on a schedule rather than indefinitely. https://docs.getdbt.com/reference/dbt_project.yml
Direction
Smallest useful version, using vocabulary that already ships:
verifywarns when a node depends on adeprecatednode (viaextends,@objectRef,@references, origin@from/@of/@via).replacedByis present, name the replacement in the diagnostic.Interacts with #4 (severity + suppressions): the escalation story is much better if a project can suppress a specific deprecation with a recorded reason while it migrates.
Notes
deprecatedattrs sees no diagnostics.