Skip to content

objectql: publish a driver conformance kit that out-of-repo plugin drivers run in their own CI, so a contract change here is caught there — epic #27261 P2 #27744

Closed

Description

@objectstack-fleet

epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
Filing gate: ③ maintainer-directed — 田騏 at 2026-10-29T21:58Z 「现在启动全部 P2」 (epic comment 6509296853, D1 amended), at 2026-10-29T21:59Z 「OData 驱动 只做 v4」 (6509311454), at 2026-10-29T22:01Z 「同意」 (generic P2 parts open source in this repository; vendor-specific drivers such as Salesforce stay out of it).
Ruling-ref: 6486145005 (#27299, Tier B = declarative OData) · 6486136301 (#27298, D7) · 6471382887 (#27261 D1–D6)
Dedupe (open AND closed): "OData datasource driver $metadata import connector credential external datasource" → 5 hits, none this work (#27298 is the ruled decision card).
Reader: the epic PM (#27261) dispatches it in the epic subtree.
type: Feature

维护者速读

  • 做什么: 把插件驱动必须满足的行为(读、筛选下推与兜底、计数、写入拒绝映射、introspectSchema)做成一个可发布的测试套件,仓库外的驱动(如闭源的 Salesforce 驱动)在自己的 CI 里跑。
  • 为什么: 厂商专属驱动按 22:01Z 的决定放在仓库外;这套用例是开源仓接口变化时及时发现不兼容的唯一手段。
  • 需要您做的: 无。

Task

Clause-②: decided by the dev (a new public export) · Metadata-protocol: none.

Activity

  1. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Claim: PM loop round 9 2026-10-29T22:57Z
    Session: session_017ihL2c5z3q4h8inrn5kwqV (epic PM); implementing card thread session_017ihL2g15Dr6sEsgv4sGBkq
    Account: marchtian
    Branch: claude/project-thread-yyuer7 (the card thread's platform-assigned branch — measured platform exception to claude/issue-<n>-<slug>)
    Worktree: objectstack-issue-27744
    Domain: domain:server
    Seat: epic:#27261#1 (epic PM; no domain:* seat). Maintainer order, 田騏 2026-10-29T22:01Z: 「同意」 (vendor drivers out of this repository, verified by a public conformance kit)
    File surface: packages/objectql/src/** (an exported driver conformance kit, or a small test-kit package under packages/ with its workspace wiring), its own tests, .changeset/** (stop on breach, including any packages/spec/src/** edit; explain in the report)
    Container & model: M, mode:thread, model: default tier (dispatch-gates --tier: no path-derived mandate), effort: high
    Clause-②: yes
    Metadata-protocol: none
    Responsibility: epic #27261 P2 (22:01Z placement decision); the floor contract it asserts is #27277's
    Thread-read: none
    Premise: holds — on origin/main no exported kit lets an out-of-repo plugin driver assert the floor contract; the floor's own tests are package-internal.
    Serial constraints: #27741 (driver-odata, in flight) is the intended first consumer; do not edit its package. Wire it in a later PR, or say in the report how the two meet.

  2. objectstack-fleet commented on Oct 29, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2g15Dr6sEsgv4sGBkq
    os-dev-report

    {
      "issue": 27744,
      "status": "done",
      "branch": "claude/project-thread-yyuer7",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/27798",
      "session": "session_017ihL2g15Dr6sEsgv4sGBkq",
      "premise_still_valid": true,
      "summary": "@objectstack/objectql now exports a plugin-driver conformance kit (packages/objectql/src/plugin-driver-conformance.ts): createPluginDriverConformance / runPluginDriverConformance / definePluginDriverConformanceSuite / pluginDriverConformanceFixtures. A caller-supplied setup(fixture) builds the driver over a remote holding the spec table rows; the floor tier (default) asserts the #27277 floor contract against FILTER_LOGIC_CASES, FILTER_TEXT_CASES (evaluated rows), TEMPORAL_CASES (lowered + token forms) and PAGINATION_CASES: the driver's own answer to the floor's query holds every matching row and only stored rows or refuses 400/404/422, the floored answer equals the table, row shape and stored values unchanged, floored count, floored paged walk, caller write probes reach 422 EXTERNAL_WRITE_REFUSED, an unavailable remote reaches 503 ERR_DATASOURCE_UNAVAILABLE, introspectSchema shape when offered. An opt-in direct tier (exact filter, count, findOne, deterministic paging, limit by presence) is the P3 oracle; pushdown is measured per case (exact/superset/refused) because DriverCapabilities has no pushdown claim (premise correction to the card's 'supports-declared'). PR body says Part of #27744: the driver-odata wiring (#27741's package, in flight) and the guide pointer (content/docs, outside the claim's file surface; #27747 can carry it) are left to their carriers.",
      "tests": "head 07def8cc (origin/main 968cacfd merged; merge touched nothing in objectql's dependency closure). Under os-verify-lock: pnpm --filter @objectstack/objectql test: Test Files 491 passed (491), Tests 9574 passed (9574), VERDICT command-exit 0. pnpm --filter @objectstack/objectql typecheck: exit 0 (check:test-typecheck OK, 64 pinned signatures held, no new debt). New file plugin-driver-conformance.test.ts: 330 tests (batteries pinned by count vs the spec tables; exact / every-row / refusing / native-Date drivers pass as stated; 11 mutants each fail on the named case ids; the suite form runs the exact driver through both tiers). eslint --no-inline-config over the 3 changed source files: exit 0. Ablation: n/a — no existing tested behaviour changed (pure addition); the mutant battery is the kit's capability-to-fail proof.",
      "gates": "dispatch-gates --commands at 07def8cc derived 59; all 59 run locally with exit codes captured before any pipe; --ran: 59 derived, 59 run, 0 NOT-MEASURED, 0 UNRUN (a DERIVED zero). check:dual-build-cjs-loads first exited 3 (no dist), rerun after check:type-check-debt built packages: exit 0. check:objectql-double-limit / check:where-matcher: none new; check:engine-double-contract exit 0. PR check-runs on 07def8cc at report time: 21 listed, 3 skipped, 18 in_progress, 0 failure.",
      "dogfood_battery": "n/a — no ! in the PR title and Clause-② is yes without a (narrowing) arm",
      "mcp_calls": "6 — github issue_read x3 (#27744 get, get_comments x2), pull_request_read get_check_runs x1, subscribe_pr_activity x1 (platform subscription, not a GitHub write), ToolSearch loads excluded; no MCP write tool",
      "api_writes": "2 — relay pr_create (run 40974315901, PR #27798, body 10129 bytes read back identical, assignees none); relay comment on #27744 (this report). git push is not a REST write.",
      "open_questions": [
        {
          "question": "Close #27744 with this PR, or keep it open until driver-odata runs the kit?",
          "options": [
            "A: PM moves the driver-odata wiring into #27741 (or a follow-up card) and the guide pointer into #27747, then edits this PR body to Fixes #27744",
            "B: keep Part of; a small follow-up PR under #27744 wires driver-odata after #27741 lands"
          ],
          "recommendation": "A, because the wiring is one test file inside driver-odata's own package, which #27741 owns, and the guide pointer is one paragraph in the page #27747 is already editing"
        }
      ],
      "out_of_scope_findings": [
        "carrier: #27741 · driver-odata should call definePluginDriverConformanceSuite with a setup over a fake OData service (card task item 2, noted, not filed)",
        "carrier: #27747 · virtual-objects.mdx 'The engine re-applies every query' step 3 should point to the kit (card task item 2, noted, not filed)"
      ]
    }
  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Claim amendment · 2026-10-30T01:35Z

    #27741 landed first (PR #27796, 0a4b0fb223), so under the claim's serial rule this card adds the driver-odata test that runs the conformance kit. The file surface adds packages/drivers/driver-odata/src/**, tests only: one suite through definePluginDriverConformanceSuite over the in-process service in src/__fixtures__/odata-service.ts, with write probes. PR #27798 now closes the card (Fixes, ruling 6511123974); the guide pointer stays with #27747.

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#27261#1 · marchtian · session_017ihL2c5z3q4h8inrn5kwqV
    Landed · 2026-10-30T04:30Z

    PR #27798 merged through the queue as d8de26d673 on 2026-10-30T03:53:19Z (head eb7990be; contract review PASS 6513256862, earlier 6511619545; seat ACCEPT 6514176452). @objectstack/objectql exports a plugin-driver conformance kit (definePluginDriverConformanceSuite and friends) that an out-of-repo driver runs in its own CI, and driver-odata runs it over its in-process service. The PR body says "Part of", so per ruling 6511123974 the seat closes the card here. The guide pointer is on #27786.

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