You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* fix(lint,runtime,core): slot-lookup guard sees the split-declaration form (#4251)
The three selectors from #4321 all key off the erasure and the lookup being
in ONE expression. Split them and every selector misses:
let ql: any;
try { ql = ctx.getService('objectql'); } catch { /* optional */ }
Selector 1 needs the call inside the declarator (this one has no init),
selector 2 needs `as`, selector 3 needs a type argument. The contract is
erased exactly as in `const ql: any = ctx.getService(...)`.
Why this could not wait for the batches: the baseline's monotonicity check
means a file that leaves the grandfather list can never be re-added, so every
batch converted more of this shape from "grandfathered" into "lint covers
this file and says nothing" -- B2 alone moved plugin-security/security-plugin.ts
into that state. A ratchet that reports a cleaner number the more you sweep
is the #4342 failure wearing different clothes.
It is a RULE, not a fourth selector, and that is the finding. esquery can
match AssignmentExpression:has(CallExpression[...]), but cannot tell which
declaration the assigned identifier resolves to -- so it would equally flag
the correctly-typed form this work line exists to produce (8 such sites
today). That needs scope analysis: cheap, no type information, but a rule.
Verified: flags all 16 real sites, none of the 8 lookalikes.
Baseline 140 -> 169 sites, file count unchanged at 37 -- 29 were already
inside grandfathered files and simply invisible. 16 more could not be
grandfathered and are typed here. No baseline key added.
Verified: ratchet holds (169/37, none new, no files added vs c54c822);
eslint clean on every changed file; tsc on the three DEBT packages
(runtime/core/cloud-connection) shows 0 errors in touched files and
identical whole-package counts vs clean HEAD (18/91/13); runtime 974/68,
core 437/27, platform-objects 254/8, plugin-security 677/32.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
* fix(platform-objects): FreshDatastoreEngine extends MigrationFlagEngine (#4251)
CI caught what my local run could not: `platform-objects` has no `typecheck`
script (type-check coverage DEBT), so its dts build is the only gate, and I
had run only its tests. The named surface introduced for the `objectql`
lookup declared the two attestation members but not the engine shape
`attestFreshDatastore` takes, so the call no longer typechecked.
Extending `MigrationFlagEngine` is the right fix rather than widening the
call: that interface IS the contract the helper states, and the surface's
job is to add ObjectQL's attestation members on top of it.
Verified: platform-objects build (CJS/ESM/DTS) succeeds, 254 tests / 8 files
pass, eslint clean; core / runtime / cloud-connection / plugin-security dts
builds re-run and all succeed.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---------
Co-authored-by: Jack Zhuang <277994282+os-zhuang@users.noreply.github.com>
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
fix(lint,runtime,core): the slot-lookup guard sees the split-declaration form — the shape that made the ratchet look cleaner the more it was used (#4251)
10
+
11
+
The three selectors from #4321 all key off the erasure and the lookup being in
12
+
ONE expression. Split them and every selector misses:
0 commit comments