Filed unassigned by the dev seat working ruling item 1 of #8739 (teaching DIALECT_LEAK_PHRASINGS MySQL's phrasings). Duplicate-searched first, keyword + title over open issues: no existing card. Filed rather than ridden along — it lands in content/docs/**, outside that card's packages/types file surface, and the dispatch fenced it explicitly.
What was ruled, and what is missing
The maintainer's 2026-08-15 ruling on #8739 (comment 5302926756, provenance 「接受你的所有建议。」) declared MySQL a supported deployment target and enumerated four consequences. Three have a home:
| item | where it lives |
|---|
| 1 — teach the leak predicate MySQL's phrasings | dispatched, PR open |
| 2 — publish the documented degradations as support-matrix caveats | nowhere — this card |
3 — the same false claim in metadata-protocol's test prose | #8822, merged via PR #8859 |
4 — the value-bearing Duplicate entry phrasing | #8823, in the engine-core lane |
Item 2 is the only one with no card, so it is the one that evaporates quietly.
The substance
Declaring MySQL supported converts two known degradations from implementation notes into promises a deployer needs before choosing MySQL. Both are currently recorded only in source comments, where a deployer will never see them:
- No partial-index integrity guarantee on MySQL.
metadata-protocol's view-definition-active-index.ts logs an operator-facing ERROR telling MySQL deployments to run the platform on SQLite or PostgreSQL for the guarantee. That sentence only makes sense addressed to a real deployment — and now that MySQL is one, it belongs in the docs rather than in a log line the deployer reads after committing. uniqueViolationColumn usually returns nothing on MySQL.packages/types/src/unique-violation.ts states this as an accepted cost: MySQL's duplicate-entry message names an INDEX, never a column, so the conflicting-field answer degrades to generic copy. Deriving a column from an index name is explicitly refused there, with reasons. User-visible consequence: import errors and form-field conflict messages are less specific on MySQL than on SQLite or Postgres.
The docs already publish the capability side of MySQL (OS_DATABASE_DRIVER=mysql as a deployment knob, MysqlConfig as authorable datasource config, per-field MySQL DDL in types.mdx) — that asymmetry is precisely what made Option A the only answer consistent with what is published. The caveats are the other half of the same promise.
Not claimed
- No defect, no failing test, no leak. Both degradations are deliberate, documented and correct where they live; this is about where they live now that the support question has an answer.
- No opinion on the page or format. Whether this is a support-matrix table, a MySQL section on an existing deployment page, or per-page notes is the docs owner's call.
- Scope not swept. I did not sweep
content/docs/** for other places that imply dialect parity. Treat the two above as the ruling's named pair, not as an exhaustive list.
Related
Filed unassigned by the dev seat working ruling item 1 of #8739 (teaching
DIALECT_LEAK_PHRASINGSMySQL's phrasings). Duplicate-searched first, keyword + title over open issues: no existing card. Filed rather than ridden along — it lands incontent/docs/**, outside that card'spackages/typesfile surface, and the dispatch fenced it explicitly.What was ruled, and what is missing
The maintainer's 2026-08-15 ruling on #8739 (comment
5302926756, provenance 「接受你的所有建议。」) declared MySQL a supported deployment target and enumerated four consequences. Three have a home:metadata-protocol's test proseDuplicate entryphrasingItem 2 is the only one with no card, so it is the one that evaporates quietly.
The substance
Declaring MySQL supported converts two known degradations from implementation notes into promises a deployer needs before choosing MySQL. Both are currently recorded only in source comments, where a deployer will never see them:
metadata-protocol'sview-definition-active-index.tslogs an operator-facing ERROR telling MySQL deployments to run the platform on SQLite or PostgreSQL for the guarantee. That sentence only makes sense addressed to a real deployment — and now that MySQL is one, it belongs in the docs rather than in a log line the deployer reads after committing.uniqueViolationColumnusually returns nothing on MySQL.packages/types/src/unique-violation.tsstates this as an accepted cost: MySQL's duplicate-entry message names an INDEX, never a column, so the conflicting-field answer degrades to generic copy. Deriving a column from an index name is explicitly refused there, with reasons. User-visible consequence: import errors and form-field conflict messages are less specific on MySQL than on SQLite or Postgres.The docs already publish the capability side of MySQL (
OS_DATABASE_DRIVER=mysqlas a deployment knob,MysqlConfigas authorable datasource config, per-field MySQL DDL intypes.mdx) — that asymmetry is precisely what made Option A the only answer consistent with what is published. The caveats are the other half of the same promise.Not claimed
content/docs/**for other places that imply dialect parity. Treat the two above as the ruling's named pair, not as an exhaustive list.Related
error-leak.tsasserts "nobody here runs" MySQL — but CI stands up a live mysql:8.0 for a required check, and the claim is load-bearing for security reasoning #8739 — the parent card and the ruling.Duplicate entry 'acme@example.com' for key …survives the cut, measured through the shipped function #8823 — item 4.