Skip to content

[finding] service-analytics carries its own copies of the comparand-type allow-list the #7872 door now single-sources — reconcile membership and message wording to the door #8186

Description

@huangyiirene

One-line statement

service-analytics carries its own copies of the comparand-type allow-list that #7872's shared door now single-sources for the SQL family — comparand-shape.ts lines ~116 and ~142 spell the identical string | number | bigint | boolean membership twice (plus Date/null arms), and its refusal messages hand-copy the "use a string, number, boolean, null, Date or binary value" sentence (comparand-shape.ts ~:456) that driver-sql / driver-turso now quote from ACCEPTED_FILTER_COMPARAND_TYPES_SENTENCE (@objectstack/spec/data).

Why filed instead of fixed in #7872's PR

The #7872 dispatch's declared file surface was packages/spec, the engine seam in packages/objectql, and exactly the two SQL-family allowlists the ruling named (sql-driver.ts, turso remote-transport.ts). The analytics twins are outside that surface, and they are not a mechanical swap: analytics has its own recorded undefined disposition (the where door normalises undefined to null rather than refusing — #5526 / #6386 territory), so reconciling its membership to the door needs its own look at whether that recorded difference survives.

What reconciliation would look like

Same shape as #7872's driver-sql half: keep comparand-shape.ts's envelopes and position logic, source the TYPE membership from isAcceptedFilterComparand and the message sentence from ACCEPTED_FILTER_COMPARAND_TYPES_SENTENCE, and record any deliberate local deltas (the undefined normalisation) at the use site the way driver-sql's undefined/binary arms now are.

Observation-class: the copies currently AGREE with the door byte-for-byte on membership — this is drift risk, not a live defect.

Found while implementing #7872 (the comparand-type door); the PR on that card carries the reconciliation pattern to copy.

Blocked-by: #7872


Generated by Claude Code

Activity

  1. added theissue type on Aug 13, 2026
  2. hotlong commented on Aug 13, 2026

    @hotlong
    Contributor

    Finding-grading round: graded pm:blocked with Blocked-by: #7872 added to the body — the reconciliation's target (isAcceptedFilterComparand / ACCEPTED_FILTER_COMPARAND_TYPES_SENTENCE on @objectstack/spec/data) ships in PR #8234, which is still open. Dispatching before that door merges would have the dev copying from an unmerged branch. On unlock (the unlock scan should re-price per protocol): the work is a queue-grade Task — single-source the analytics twins' TYPE membership and message sentence to the door, keeping envelopes/position logic, and record the local undefined-normalisation delta (#5526/#6386) at the use site iff it survives the dev's own look. Note the door PR itself may have absorbed or shifted the target lines — re-verify comparand-shape.ts line anchors on the merged ref, not this card's. Type Task, domain:services confirmed.

    本评论来自分诊座位 Routine。


    Generated by Claude Code

  3. hotlong commented on Aug 14, 2026

    @hotlong
    Contributor

    Unlock scan: Blocked-by: #7872 cleared — #7872 closed (PR #8234 merged: the comparand-type door single-sourced at the shared compile face; ACCEPTED_FILTER_COMPARAND_TYPES_SENTENCE verified present in @objectstack/spec/data on the merged ref). Premise re-verified: packages/services/service-analytics/src/comparand-shape.ts:116 and :142 still spell the local membership. Back to pm:queue.

    The card's own caveat stands: analytics' recorded undefined disposition (normalise-to-null rather than refuse) needs an explicit keep-or-reconcile call in the PR, not a silent inherit from the door.

    本评论来自分诊座位 Routine。


    Generated by Claude Code

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

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions