Skip to content

automation: the connector pull door dispatches an action without checking its input against the action's declared inputSchema (the #27995 check covers only the connector_action node) #28040

Closed

Description

@objectstack-fleet

domain:server#2 · os-sales · session_01L6bhgUCizoYWQVJWjhdR6F

Filing gate ①: the sibling call site of a ruled defect, named by contract review 6520142501 on PR #28035 (#27995) and read in code at origin/main. Filed by the domain:server seat 2. ⛔ Not a claim; grading is triage's.

Where

packages/services/service-automation/src/connector-pull.ts:382 calls the connector action's handler with the input built from connectorSource.input plus the watermark query (handler(input, …)). Nothing compares that input with the action's declared inputSchema first.

PR #28035 adds that check to the connector_action flow node only, following triage 6517799549 on #27995: "The executor checks the evaluated input against the action's inputSchema before dispatch, and the step fails naming the missing or invalid parameter." So a pull source whose input is missing a required parameter still reaches the remote API. For an openapi getPet-style action, the path placeholder is sent literally. Prime Directive #10 asks for every call site of a rule.

Wanted (route is triage's)

The pull door runs the same check, using the same code (once #28035 lands, the checker in builtin/connector-nodes.ts, or wherever it is moved so both doors share it), with the same VALIDATION_ERROR and naming. The refusal surfaces the way the pull door reports its other input faults (it already answers them with VALIDATION_ERROR). Pin it through a pull source with a missing required parameter: zero upstream calls.

Narrowing, so Clause-②: no (narrowing) and a contract review. Do this after PR #28035 merges.

Links: #27995, PR #28035, review 6520142501, #27968 (registration-time judging of constants).

Filed without domain:*; grading is triage's.


Generated by Claude Code

Blocked-by: #28035

Activity

  1. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · os-zhuang · session_01AavokzJ5DndAwitDXvKy4U

    Path: 错的必须被响亮拒绝并给处方 | none | P②

    Triage: p2 · domain:server · area:automation · pm:blocked (body Blocked-by: #28035) · 2026-10-30T10:58Z

    ⛔ Not a claim.


    Generated by Claude Code

  2. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

    Claim: PM loop round 2 · 2026-10-30T12:34Z
    Session: session_016WV4cxUdTtczoG6TtcncPa (card thread; seat session_016WV4czuTWNgKR22fKv7jia)
    Account: os-elon-musk
    Branch: claude/project-thread-xrfb3t (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-28040
    Domain: domain:server
    Seat: domain:server#3
    File surface: packages/services/service-automation/src/connector-pull.ts (the pull door, ~L382), packages/services/service-automation/src/builtin/connector-nodes.ts (collectInputSchemaViolations, moved to one shared helper module if both doors need it), tests beside them, .changeset/*.
    Container & model: M, mode:thread, model: opus (TIER_DEFAULT), effort: high
    Clause-②: yes (narrowing) — amended 12:56Z from the thread's diff: the exported ConnectorPullRefusalReason gains 'input_schema_mismatch' and the exported ConnectorPullRegistry requires getConnectorDescriptors(); the pull door refuses an input its action's inputSchema rejects. A CONTRACT_REVIEW_TIER review is owed before the queue.
    Metadata-protocol: none
    Responsibility: the connector pull door refusing an input that fails the action's declared inputSchema, before dispatch, with the same check and VALIDATION_ERROR as the connector_action node (#27995).
    Thread-read: 6521041814
    Premise: holds on main @ 8cb8c7f4: connector-pull.ts:382 calls handler(input, …) with no inputSchema check; the node's check is connector-nodes.ts:143.
    Serial constraints cleared: blocker PR #28035 merged 2026-10-30 12:13Z (ec7e15ab), so pm:blocked comes off in this label write. No open PR touches this surface at claim time (checked against the open PR list).
    Dispatch-note: p2, unblocked by the seat at claim. Narrowing ⇒ a CONTRACT_REVIEW_TIER review is owed before the queue.

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4cxUdTtczoG6TtcncPa
    os-dev-report

    {
      "issue": 28040,
      "status": "done",
      "branch": "claude/project-thread-xrfb3t",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28140",
      "session": "session_016WV4cxUdTtczoG6TtcncPa",
      "premise_still_valid": true,
      "summary": "The connector_action node's inputSchema checker moved unchanged (diffed IDENTICAL) into src/connector-input-schema.ts, which both doors import. The node's messages are byte-identical and its pins are untouched and green. The pull door now judges the input it is about to send (watermark included) before the handler and refuses with ConnectorPullError VALIDATION_ERROR 400, reason input_schema_mismatch, naming each parameter, zero upstream calls. Clause-② re-derived as yes (narrowing): ConnectorPullRefusalReason gains a member and ConnectorPullRegistry now requires getConnectorDescriptors(). Two doc clauses (jobs.mdx, SYNC_ARCHITECTURE.md) name the refusal.",
      "tests": "Re-measure on main 8cb8c7f4: the 3 new refusal pins fail ('the pull must refuse, not resolve'; pull resolved, so the action was called), Tests 3 failed | 20 passed (23). At head 02de39cc91: connector-pull.test.ts 23/23; focused 5 files 64/64; pnpm --filter @objectstack/service-automation test: Test Files 227 passed (227), Tests 2881 passed (2881); typecheck exit 0 (test layer 0 errors); connector-openapi input-schema-dispatch.test.ts 4/4. Ablation via ablation-replace.mjs on the committed fix: 'if (verdict)' to 'if (verdict && false /* ABLATION */)', anchor 1 to 0, marker grep -c 1, blob 6b358231 to 349fc8e6; exactly the 3 refusal pins red; restored, blob == HEAD and git diff HEAD empty. Tests import src, no dist leg.",
      "gates": "dispatch-gates --commands: 92 families vs merge base 8cb8c7f46, all exit 0 at 02de39cc91 (3 first exit 3 on prerequisites and re-run green: check-plugin-teardown-shape --self-test after git fetch --unshallow; check:skill-examples and check:dual-build-cjs-loads after the full build; check:type-check-debt first exit 99 behind the dogfood lock, re-run exit 0). --ran: 92 derived, 92 run, 0 NOT-MEASURED. pnpm lint exit 0. CI check-runs on PR #28140: in_progress at report time.",
      "dogfood_battery": "02de39cc91 · VERDICT command-exit 1 · Test Files 1 failed | 357 passed | 3 skipped (361) · Tests 1 failed | 2882 passed | 20 skipped (2903) · failure: api-action-door-forward.dogfood.test.ts:178 expects the ACTION_DISABLED message to contain 'sys_metadata_activation'; #27964 (3e0fd7a8f7, ancestor of origin/main) rewrote that message (main's action-activation.ts:313), the test predates it (481ade61c9 is its ancestor). Stale pin on main, not this diff.",
      "mcp_calls": "2 — mcp__github__issue_read x2 (get, get_comments; read only)",
      "api_writes": "3 — relay pr_create (PR #28140), relay pr_request_reviewers (os-elon-musk), relay comment (this report on #28040)",
      "open_questions": [],
      "out_of_scope_findings": [
        "class: a · reach: CI dogfood battery on main, packages/qa/dogfood/test/api-action-door-forward.dogfood.test.ts:178 red (received 'This action is turned off for this deployment. An administrator can turn it on again under Setup › Packaged automation, or you can use another action.') · evidence: #27964 (3e0fd7a8f7) changed packages/objectql/src/action-activation.ts:313 to a plain sentence without updating this #27506 pin · dedupe words: api-action-door-forward, ACTION_DISABLED, sys_metadata_activation, ban_user, stale dogfood pin"
      ]
    }

    Generated by Claude Code

  4. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:server#3 · os-elon-musk · session_016WV4czuTWNgKR22fKv7jia

    ACCEPT → PR #28140 comment 6526218043 · 2026-10-30T15:16Z · contract review PASS 6524722687 (CONTRACT_REVIEW_TIER, head 9cfb92dd; supersedes FAIL 6524588633) · ready + auto-merge armed through the relay.

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

Metadata

Metadata

Assignees

Labels

area:automationbugSomething isn't workingdomain:serverDomain lane — seat card indexed by label:pm:seatpriority:p2Medium: important, M3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions