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
The metamodel's relation contract is authoritative outgoing relations only: a source artifact declares what it points at, and everything pointing back is derived during generation.
Two open issues found the same violation of that contract from different directions, and both land in the same generator and the same schema:
generate the refinement note instead of hand-writing it #68 — refine-adr tells authors to hand-write a note on the refined ADR. Same reciprocal-incoming problem, expressed as prose rather than YAML — which is worse, because no validator can see prose.
Both propose the same remedy: generate the incoming view from the outgoing relation, and stop accepting a hand-maintained reciprocal. Fixing them separately would mean touching ChapterIncludeFragmentGenerator's neighbours twice, deciding the fate of the superseded_by schema field twice, and risking two different answers.
#68 says so itself: the superseded_by inconsistency is "worth resolving at the same time".
Shared decisions
These must be answered once, not per slice:
The fate of superseded_by in metamodel/artifact.schema.yaml — removed, deprecated, or declared generated-only. This is the decision both issues stop at.
Where a derived relation becomes visible to a reader. The -traceability.adoc fragment already carries incoming relations, but as a matrix row at the foot of the document — which is why the contradiction in generate the refinement note instead of hand-writing it #68 survived review. A reader meets the decision paragraph first.
Whether the validator rejects hand-maintained reciprocal metadata, or only warns.
Which relation types this covers.supersedes and refines are the two in evidence; the rule is generic to any relation with a meaningful inverse.
Why these belong together
The metamodel's relation contract is authoritative outgoing relations only: a source artifact declares what it points at, and everything pointing back is derived during generation.
Two open issues found the same violation of that contract from different directions, and both land in the same generator and the same schema:
metamodel/artifact.schema.yamldeclaressuperseded_by, the incoming side ofsupersedes. Maintained by hand, it is a second source of truth that drifts silently.refine-adrtells authors to hand-write a note on the refined ADR. Same reciprocal-incoming problem, expressed as prose rather than YAML — which is worse, because no validator can see prose.Both propose the same remedy: generate the incoming view from the outgoing relation, and stop accepting a hand-maintained reciprocal. Fixing them separately would mean touching
ChapterIncludeFragmentGenerator's neighbours twice, deciding the fate of thesuperseded_byschema field twice, and risking two different answers.#68 says so itself: the
superseded_byinconsistency is "worth resolving at the same time".Shared decisions
These must be answered once, not per slice:
superseded_byinmetamodel/artifact.schema.yaml— removed, deprecated, or declared generated-only. This is the decision both issues stop at.-traceability.adocfragment already carries incoming relations, but as a matrix row at the foot of the document — which is why the contradiction in generate the refinement note instead of hand-writing it #68 survived review. A reader meets the decision paragraph first.supersedesandrefinesare the two in evidence; the rule is generic to any relation with a meaningful inverse.Slices
superseded_byOut of scope
Origin
Both slices were found while validating the toolkit in
dieterbaier/budget, which vendors the tooling. See also budget#42, referenced from both.