ID |
|
|---|---|
Status |
Backlog |
Bucket |
architecture |
Priority |
4 |
Theme |
classification-model |
Created |
2026-08-13 |
Updated |
2026-08-13 |
The extension ordinal records JVM iteration order and calls it a position
store_graph_schema_extension.ordinal’s column comment promises "stable position in the
resolved set, for faithful replay", and the value does not deliver it.
`AbstractRewriteMojo.buildSchemaRecipe builds the recipe with List.copyOf(extensions) over the
Set that effectiveSchemaFileExtensions returns, and the omitted-configuration path returns
RewriteContext.DEFAULT_SCHEMA_FILE_EXTENSIONS, a Set.of(...) whose iteration order is
salted per JVM. So two runs of the same build write the same extension rows under different
ordinals, and the comment describes a stability the column does not have.
Nothing is currently wrong downstream, which is why this is a Backlog item and not a defect against a shipped promise to a reader. Extension order does not affect match membership, the filter being a suffix test, and the recipe round-trip anchor compares an in-run recipe against its own rows so it passes either way. The cost is a column that reads as meaningful and is not, in a relation whose whole justification is faithful replay.
Two candidate fixes, and the choice is the item’s work. Either sort the extensions canonically
where the recipe is minted, making the ordinal a real and reproducible position; or accept that
the effective extension filter is a set, drop the ordinal, and key the relation on
(graph_name, extension) the way store_graph_lint_disabled_rule keys its own Set half. The
second is the shape the grain rule the config family settled would pick today ("an ordinal only
where the source is genuinely ordered"), so the burden is on the first option. Either way the
column comment is rewritten to match.