Skip to content

[finding][drivers] checkDateBucketParity 的每个调用点都写 driver as never,把 BucketableDriver 替身的编译期一致性整个抹掉 —— 且实测该 cast 并不必要 #6354

Description

@os-zhuang

#6212 批 A+E(PR 见下)实施期间实测发现,记录备查。观察类,不挂 pm:queue,请分诊轮定级。

现状

@objectstack/verify 导出 checkDateBucketParity(driver: BucketableDriver, opts?)BucketableDriver 是它对被测驱动的结构替身packages/verify/src/date-bucket-parity.ts)。全仓每一个调用点都把驱动 cast 成 never 再传进去:

调用点 写法
packages/qa/dogfood/test/date-bucket-parity-conformance.test.ts:49 checkDateBucketParity(make() as never, { … })
packages/drivers/driver-turso/src/date-bucket-parity.test.ts:43 checkDateBucketParity(driver as never, { … })
packages/drivers/driver-turso/src/date-bucket-parity.test.ts:128 checkDateBucketParity(driver as never, { … })

as never 之后,「这个驱动确实具备替身声明的那组方法」这件事一次也没有被检查过。替身存在的意义正是表达这组一致性,而 100% 的调用点把它关掉了——这与 #6212 正文记的是同一族事实(一个声明了却没人读的形状),只是发生在调用点而不是声明点,与 #6210 在 dogfood 踩的 DriverLike 同盲区。

实测:这个 cast 并不必要

date-bucket-parity-conformance.test.ts:49as never 去掉后:

> @objectstack/dogfood@0.0.40-rc.4 typecheck
> tsc --noEmit
(无输出,退出码 0)

SqlDriverSqliteWasmDriver 结构上本来就满足 BucketableDriver注意这是在 #6212 批 A+E 已经把 BucketableDriver.aggregatequery: unknown 收窄为 DriverQuery 之后测的——收窄前只会更宽松,所以这是一处先于本次改动就已存在的死 cast。turso 的两处未单独实测(未改动该包),但它继承自 SqlDriver,预期同理,实施时需各自复核。

不是缺陷,别当缺陷派

运行期行为完全正确:checkDateBucketParity 照常跑,date-bucket 一致性照常被验证(dogfood 520 tests 全绿)。丢掉的只是编译期的一致性检查——今天没有人踩。所以判级请按观察类走。

代价是休眠的:哪天某个驱动少掉替身要求的一个方法,或者替身自身长出新成员,三个调用点一个都不会红,checkDateBucketParity 会在运行期抛 driver.aggregate is not a function 之类,而不是在 tsc 里被拦下。

如果要做

逐处去掉 as never 并各自复核 typecheck(dogfood 已实测可去;turso 两处待测)。若某处去掉后真的报错,那个报错本身才是有价值的产出——它会指出替身与真实驱动之间一处此前无人知晓的形状分歧,届时应先判断该改替身还是该改驱动,而不是把 cast 加回去。

⚠️ 同族但不在本单内、需要分别判断的:checkReadCoercionCoercibleDriver 是否也有同样的调用点 cast(未实测)。

会话:session_01WyvqvKMG6asi9aXjKE6xtx#6212 批 A+E 实施期间发现,未认领)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions