Repository navigation
objectql test driver doubles are any-annotated at scale — the retired-capability tombstone has no tsc channel in 64 files #7264
Description
Activity
Triage:
findingappended (domain:engine-corewas applied at filing — kept, the face ispackages/objectql/src/**/*.test.tsdoubles).- Grade rationale: observation-class by the card's own evidence — no retired bit is authored in any of the 64 files today, no gate is red, and the sweep run as part of objectql/protocol-batch-atomic.test.ts mock driver advertises the retired
supports.transactionsbit — invisible because the mock is: any#6546 found nothing beyond the already-handled instances. Nothing a user hits; the harm channel is copy-a-mock. That is thefindingshape, notpm:queue. - Premise spot-check @
origin/main1da1f32: 96 objectql test files carry: any =annotations (card measured 64 driver-ish doubles at0caf122— direction confirmed, my broader count is a superset). - Dedup: objectql/protocol-batch-atomic.test.ts mock driver advertises the retired
supports.transactionsbit — invisible because the mock is: any#6546 (the instance that spawned this card) is in flight and fixes one file only (PR test(objectql): type the batch-atomic driver double asIDataDriver, dropping the retiredsupports.transactionsbit #7261, accepted 04:20Z, retypes that one double toIDataDriver); this card is the corpus-wide question — distinct scope, no overlap. PR test(objectql): type the batch-atomic driver double asIDataDriver, dropping the retiredsupports.transactionsbit #7261 also demonstrates the fix shape a future sweep would replicate.
本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
- Grade rationale: observation-class by the card's own evidence — no retired bit is authored in any of the 64 files today, no gate is red, and the sweep run as part of objectql/protocol-batch-atomic.test.ts mock driver advertises the retired
Findings triage (re-verify @
origin/mainc6a4eeb): HOLD — the tsc channel is still off at scale (a broader count of: any =inpackages/objectql/src/*.test.tsnow hits 101 files, direction unchanged from the filed 64), no retired bit authored anywhere, no gate red. Observation-class stands; a 64-file retyping sweep is real cost with no live defect behind it today.findingstands.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
Findings triage (re-verify @
origin/mainafdc6ea): HOLD — the tsc channel is still off at scale, and the count moved again:: any =now appears in 102 files underpackages/objectql/src/*.test.ts(101 at the 16:20Z check, 64 as filed). Direction unchanged, nothing red, no retired bit authored anywhere. A 100-file retyping sweep remains real cost with no live defect behind it.findingstands.本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
Findings triage (re-verify @
origin/main744b8f5): HOLD —: any =still appears in 102 files underpackages/objectql/src/**/*.test.ts(unchanged from the 01:28Z check), no retired bit authored, no gate red. Observation-class stands; the copy-a-mock harm channel is real but latent, and none of the three proposed shapes is cheap enough to promote without a live instance.findingstands.Cadence note: three consecutive HOLDs with a stable premise — like #6305, this can rotate to the back until the corpus changes direction or a new retired-bit instance surfaces (that instant makes shape 2 — retype only non-empty
supportsdoubles — the promotion candidate).本评论来自分诊座位 Routine(#5474 试点),不构成认领。
Generated by Claude Code
Findings triage round, 2026-08-11 (maintainer-directed). Graded: hold — 64-file typing sweep with no live defect; the tombstone channel matters most at the next retirement. Restart: the next driver-capability retirement card — run this sweep first so the tombstone can fire through the doubles it is meant to police.
Generated by Claude Code
Findings-round disposition: closed (not planned) — fifth consecutive hold on a stable premise, zero measured pull, and the "do it later" option is getting monotonically worse (the
: any =corpus grew 64 → 108 files in two days), which means the sweep this card imagines will realistically never be dispatched in this form.What the closure does NOT dispute: the premise is verified live (zero authored retired capability bits today; the tombstone has no tsc channel in those doubles). The harm stays latent until a retirement actually fires.
Reopen trigger, documented so this is cheap to resurrect: a fourth
retiredKey(entry lands inpackages/spec/src/data/driver.zod.ts(today: create/read/update), or any authored retired/invented capability key shows up in asupports:literal underpackages/objectql/src/**/*.test.ts. At that moment the promotion candidate is shape 2 only — retype the ~21 non-emptysupportsdoubles — not the 108-file sweep.Maintainer veto = reopen; listed in this round's 代裁/closure section of the round report.
本评论来自分诊座位(scheduled session
session_01DLzE5XVRASxFotEU1h9cjH),不构成认领。
Generated by Claude Code
Found while fixing #6546 (PR #7261). Recorded, not fixed there — #6546's file surface is
packages/objectql/src/protocol-batch-atomic.test.tsonly, and folding this in would have turned anXS card into a 64-file sweep.
Observation
#6546 was one driver double authoring a capability key retired by #4634. The deletion was trivial;
the interesting half was why nobody noticed — the literal was annotated
const driver: any, so itwas never compared against
IDataDriver, and nothing in that file parses it throughDriverInterfaceSchema. With both channels off, theretiredKey(...)tombstone inDriverCapabilitiesSchemahad nothing to fire through.That annotation is not unusual in this package. Measured on
origin/main@0caf122:packages/objectql/src/**/*.test.tswith a driver-ish double annotated: any =supports: {} as anyIDataDriverat allWhat this is NOT
No retired bit is authored in any of them today, and no gate is red. A repo-wide sweep for
supports:literals spelling retired or invented keys (run as part of #6546) found nothing beyond#6546's own instance, #4782's, and the two deliberate rejection fixtures
(
packages/spec/src/data/driver.test.ts:317,packages/spec/src/data/datasource.test.ts:60), whichare correct as written. Every other literal is either
{}or a live bit(
autonumber,batchSchemaSync,queryDateGranularity).So this is observation-class, exactly like #6546: nothing a user hits, nothing broken.
Why it is still worth a line
The tombstone's stated design is that a retired key is authored-unwritable — "tsc rejects it at
the authoring site" is the first of the two channels
driver.zod.tsnames for it. Across these 64files that channel is switched off, so the tombstone's protection currently rests entirely on the
second channel (a parse), which test doubles by definition rarely go through.
The concrete harm is the one #4782 and #6546 both name: mocks get copied. #6546's mock had
carried its retired bit since #4634 without anyone noticing, and it was found by reading, not by a
gate. The cost of the class is that the next such copy is equally invisible.
Measurement from #6546, for sizing
Retyping one double
any→IDataDrivercost three stubs for interface members the tests neverreach (
upsert,syncSchema,dropTable), and moved@objectstack/objectql's measuredTEST_DEBTcount by zero (340 → 340, ceiling 355). One data point, not a trend — that doublewas already close to interface-shaped, and the
as anyin 17 of the files above suggests some arefurther away. Anyone picking this up should re-measure per file rather than extrapolate from one.
Note also that a naive sweep will trip
TS2790wherever a test doesdelete driver.<requiredMember>to prove a method-presence gate;
Reflect.deleteProperty(...)is the cast-free equivalent (#6546used it).
Suggestion
Not obviously a single sweep. Plausible shapes, in increasing cost:
supports— the ones where a capability keycould actually be spelled wrong — which is a much smaller set than 64.
any, ratcheted against a measured baseline in thestyle of
check-engine-double-contract.Filing without a recommendation; the sizing above is what I measured, not a plan.