ID |
|
|---|---|
Status |
Backlog |
Bucket |
tech-debt |
Priority |
2 |
Theme |
nodeid |
Created |
2026-08-09 |
Updated |
2026-08-09 |
init.sql documents the live idreffixture DDL as serving deleted shim tests
graphitron-sakila-db/src/main/resources/init.sql opens the idreffixture schema with a header
block framed on the deleted IdReferenceField synthesis shim. The stale part is narrower than the
block reads: its stated purpose and its per-FK shim-versus-column-lookup prose have lost their
referent, while the sentence about studieprogram carrying __NODE_TYPE_ID / __NODE_KEY_COLUMNS
describes a mechanism that is untouched and load-bearing. A rewrite that took the whole header as
false would delete live facts along with the dead ones, so the three claims are graded separately
here.
-
Stale. "Synthetic fixture for IdReferenceField synthesis shim tests" as the schema’s stated purpose. The grammar item deleted the FK-qualifier synthesis arm along with
IdReferenceShimClassificationTestandIdReferenceShimWarnFormatTest. -
Stale. The per-FK paragraphs reading behaviour off "the shim-before-column-lookup ordering", which decides "whether the field becomes IdReferenceField (shim wins) or ColumnField (column lookup wins)", and the closing "without the shim the field is Unresolved". The FK role shapes and the two qualifier strings those paragraphs derive are still exactly right, and still asserted in
JooqCatalogIdRefTest; it is only the shim framing wrapped around them that has lost its referent. -
True, keep it. "`studieprogram` receives
__NODE_TYPE_ID/__NODE_KEY_COLUMNSviaNodeIdFixtureGeneratorso thatcatalog.nodeIdMetadata("studieprogram")returns present." The metadata mechanism is untouched and load-bearing:JooqCatalog.nodeIdMetadatareads the constants,TypeBuilder.buildTableTypepromotesimplements Node+@tableto aNodeTypeon their presence with no@nodepresent at all,NodeDeclaration.isNodeTypegates the inference path on them, andNodeProvenance.Origin.METADATAexists to record them as an identity source.NodeIdFixtureGeneratorstill mapsstudieprogram, and the generatedStudieprogramstill carries both constants. Only the trailing "satisfying the shim gate" purpose clause is wrong.
The DDL is live and worth keeping. Its consumers are now JooqCatalogIdRefTest (qualifier-map
derivation for the two FK role shapes) and JooqRecordServiceParamPipelineTest (@reference(key:)
FK selection over a table with two FKs to one target), and the fix is to restate the header on those
grounds. It matters because the comment is what the next person reads before deciding whether a
column or FK here is safe to change, and it currently points them at a mechanism that cannot break.
One question the rewrite has to settle rather than restate. With bare @node plus metadata,
Studieprogram resolves typeId = "Studieprogram" and keyColumns = [STUDIEPROGRAM_ID] off the
constants, but the no-metadata path defaults to the type name and the primary key, which are those
same two values. The metadata therefore routes the type down the metadata-provenance branch without
changing anything either current consumer asserts on. Either say that in the header explicitly (it
is there to exercise that branch), or decide the metadata has stopped earning its place on this
fixture; what the rewrite must not do is assert a dependency no test pins.
Found at the grammar item’s In Review → Done gate, in the tail of its retirement sweep; filed rather
than held because the sweep’s ten anchored sites were all closed and this is prose in test-fixture
DDL. The original filing said "none of that exists any more", which over-reached across all three
claims at once; corrected on 2026-08-09 after the metadata mechanism was re-checked against main
sources. The neighbouring graphitron-sakila-example/src/main/resources/graphql/schema.graphqls
comment naming "the old findGraphQLTypeForTable detour" is a smaller instance of the same thing,
reading as history for a backstop whose underlying invariant still holds; fold it in or leave it,
but decide rather than miss it.