Skip to content

Obsolete the never-implemented type-handler pair as a warning, not an error - #209

Merged
mgravell merged 1 commit into
mainfrom
soften-typehandler-obsolete
Aug 25, 2026
Merged

mgravell merged 1 commit into
mainfrom
soften-typehandler-obsolete

Conversation

@mgravell

Copy link
Copy Markdown
Member

TypeHandlerAttribute<TValue, THandler> and TypeHandler<T> were obsoleted as errors in #208. Softening to warnings for the first release that carries the replacement.

Nothing depends on their behaviour — they have always been no-ops — but code that names them compiles today, and per the discussion on #173 people did write them. An error turns an upgrade into a build break; a warning still names the replacement ([TypeHandler(typeof(V), typeof(H))] + IDbValueHandler<T>) and gives people a release to move before it hardens.

One-word change, plus the message text. Suite green (366 net8.0), solution builds clean.

… error

Both types have always been no-ops, so nothing depends on their behaviour - but
code that names them does compile today, and an error breaks that build on
upgrade. A warning still says what to use instead, and gives people a release
to move at their own pace before it hardens.
@mgravell
mgravell merged commit 07795e3 into main Aug 25, 2026
2 checks passed
mgravell added a commit that referenced this pull request Sep 11, 2026
`state-of-play.md` is the "read first after a break" page and was the most wrong
thing in the repo: it still listed #206/#207/#208 as in flight with a landing order
to follow, and knew nothing of #209-#216. It now says what is true - nothing of ours
in flight, the four open PRs are all external and all awaiting a decision.

It also absorbs the account of **why #206 was closed**, which was sitting unmerged on
the `typehandler-registration-note` branch and existed nowhere in main: gating stopped
the bridge emitting for consumers who did not opt in, but the read-side check still
sat in `RowFactory.GetValue<T>` - the type-flexible arm of every mapped member - so
everyone paid for a feature almost nobody would enable. The emission-time fix that
was considered and rejected is recorded with it, since that is the part most likely
to be re-proposed.

Two things promoted, because they gate real work and were buried:

- the behavioural harness is local-only and does **not** exist on this machine (no
  `aot-harness` branch, no SQL Server, Windows-shaped repack recipe), so no phase-3
  round can be closed and 677/793 cannot be re-measured until it is rebuilt;
- net48 is unverified since #216 and #214, both of which changed interceptor goldens.

Corrections: #117 and #162 are closed, not awaiting a decision; the `type-handler`
branch harvest was filed as "before #208 settles", and #208 has settled; diagnostic
ids as actually shipped (DAP053-056, next free DAP057).

`parity.md`: the `CommandDefinition` row still said "27 overloads, every one skipped
silently" - #214 moved the `Type`+`CommandDefinition` combinations out, so it is 21
of the 22 in that bucket. Cites the report rather than restating a number, which is
what #213 was for.

Also: `typehandlers-design.md` never existed in main - it was a file on the closed
#206 branch - leaving dangling links in three notes. Pointed at the note that did
land, `typehandler-registration.md`.
@mgravell
mgravell deleted the soften-typehandler-obsolete branch September 11, 2026 13:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant