① — a build-time lint that goes silent on exactly the metadata the runtime then refuses.
Filed by the domain:spec execution seat 1 (seat post #6017, session_013RDBh5DqXd2xnLwvHLgLFr). ⛔ Unlabelled beyond finding, ⛔ ungraded, ⛔ unrouted. Suggested lane: domain:spec (packages/lint, which the domain table assigns to this lane by exception). Surfaced by the #19679 round 2 (PR #19763); re-read at source by this seat before filing.
The two precedence rules, at source (origin/main)
packages/spec/src/data/autonumber-format.ts — resolveAutonumberFormat, whose docblock calls itself the one place the contract default is applied, 「so no caller has to keep its own copy (#6555)」:
const canonical = field?.autonumberFormat;
if (typeof canonical === 'string' && canonical) return canonical; // NON-EMPTY only
const shorthand = field?.format;
if (typeof shorthand === 'string' && shorthand) return shorthand;
return DEFAULT_AUTONUMBER_FORMAT;
and it says why, in so many words: 「A key holding anything other than a NON-EMPTY string counts as undeclared」.
packages/lint/src/lint-autonumber-formats.ts — its own copy:
const fmt = typeof f.autonumberFormat === 'string'
? f.autonumberFormat
: (typeof f.format === 'string' ? f.format : '');
if (!fmt) continue;
⇒ on { type: 'autonumber', autonumberFormat: '', format: '{nope}{000}' } the lint picks the empty canonical key, hits if (!fmt) continue, and reports nothing — while the resolver treats '' as undeclared and returns {nope}{000}, which the engine and driver-sql then mint through, throwing on the unknown {nope} field on every create.
The round measured all three legs: the lint returns no finding; a control { format: '{nope}{000}' } draws autonumber-references-unknown-field; resolveAutonumberFormat returns {nope}{000}. The document parses through FieldSchema.
Why it is a defect and not a style note
The resolver exists because two copies of this rule already disagreed once (#6555, closed — engine ?? versus driver truthiness, fixed by #7262 / #7263). The lint is a third copy that #6555 did not reach, and it disagrees with the resolver in the direction that matters: silent at build time, failing at runtime.
⛔ What is NOT claimed
- ⛔ No census of stored metadata carrying
autonumberFormat: ''. Whether anyone authors it today is unmeasured.
- ⛔ No repair chosen — calling
resolveAutonumberFormat from the lint is the obvious one and the resolver's own docblock asks for it, but the owner decides.
Dedupe
Repo-scoped issue search, 「lint-autonumber-formats precedence empty autonumberFormat resolveAutonumberFormat lint misses shorthand own copy」: 10 results including closed. None names the lint's copy. Nearest: #6555 (closed) — the card that created the resolver; #7262, #7263 (closed) — the engine and driver halves it de-fallbacked.
Dedupe words: lint-autonumber-formats precedence · resolveAutonumberFormat empty autonumberFormat · autonumber lint own copy · lint misses shorthand
Generated by Claude Code
① — a build-time lint that goes silent on exactly the metadata the runtime then refuses.
Filed by the
domain:specexecution seat 1 (seat post #6017,session_013RDBh5DqXd2xnLwvHLgLFr). ⛔ Unlabelled beyondfinding, ⛔ ungraded, ⛔ unrouted. Suggested lane:domain:spec(packages/lint, which the domain table assigns to this lane by exception). Surfaced by the #19679 round 2 (PR #19763); re-read at source by this seat before filing.The two precedence rules, at source (
origin/main)packages/spec/src/data/autonumber-format.ts—resolveAutonumberFormat, whose docblock calls itself the one place the contract default is applied, 「so no caller has to keep its own copy (#6555)」:and it says why, in so many words: 「A key holding anything other than a NON-EMPTY string counts as undeclared」.
packages/lint/src/lint-autonumber-formats.ts— its own copy:⇒ on
{ type: 'autonumber', autonumberFormat: '', format: '{nope}{000}' }the lint picks the empty canonical key, hitsif (!fmt) continue, and reports nothing — while the resolver treats''as undeclared and returns{nope}{000}, which the engine and driver-sql then mint through, throwing on the unknown{nope}field on every create.The round measured all three legs: the lint returns no finding; a control
{ format: '{nope}{000}' }drawsautonumber-references-unknown-field;resolveAutonumberFormatreturns{nope}{000}. The document parses throughFieldSchema.Why it is a defect and not a style note
The resolver exists because two copies of this rule already disagreed once (#6555, closed — engine
??versus driver truthiness, fixed by #7262 / #7263). The lint is a third copy that #6555 did not reach, and it disagrees with the resolver in the direction that matters: silent at build time, failing at runtime.⛔ What is NOT claimed
autonumberFormat: ''. Whether anyone authors it today is unmeasured.resolveAutonumberFormatfrom the lint is the obvious one and the resolver's own docblock asks for it, but the owner decides.Dedupe
Repo-scoped issue search, 「lint-autonumber-formats precedence empty autonumberFormat resolveAutonumberFormat lint misses shorthand own copy」: 10 results including closed. None names the lint's copy. Nearest: #6555 (closed) — the card that created the resolver; #7262, #7263 (closed) — the engine and driver halves it de-fallbacked.
Dedupe words:
lint-autonumber-formats precedence·resolveAutonumberFormat empty autonumberFormat·autonumber lint own copy·lint misses shorthandGenerated by Claude Code