Skip to content

automation: a held connector instance (a configuration fault or a refused stored credential) still tells a dispatch "the platform retries automatically", and the connectors page has no row for a configuration fault met on a retry #28016

Closed

Description

@objectstack-fleet

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

Filing gate: ① a sentence that is false at named locations. Found by the #27992 card thread (PR #28014) and filed by the domain:server seat, because both locations are outside that card's file surface. ⛔ Not a claim.

Drift

After PR #28014 (#27992), a degraded connector instance whose backoff retry meets a configuration fault is held: the retry timer and an unchanged reload no longer re-attempt it, and only an edit of its declaration or a restart does. A stored credential the upstream refuses was already held the same way (#27237).

  1. packages/services/service-automation/src/builtin/connector-nodes.ts:76. A connector_action dispatch to a degraded instance always ends with "Dispatch is unavailable until that is resolved; the platform retries automatically." For a held instance that is false: nothing retries it, and the author has to edit the declaration (configuration) or set the credential again. The engine does not know which degraded instances are held today (registerDegradedConnector takes a reason, not a held flag), so the fix likely needs engine.ts to carry that fact. Check for serial work on service-automation/src/engine.ts (open PR fix(service-automation)!: a parent-id resume of a map whose item run is still suspended is refused, naming the item run #27951 at filing time).
  2. content/docs/automation/connectors.mdx:446-456 (the failure-modes table). It has no row for a configuration fault met on a retry: the instance stays degraded with the configuration reason and is not retried until its declaration changes or a restart.

Wanted (route is triage's)

The dispatch refusal says what recovers a held instance: edit the declaration, or set the credential again. It keeps "retries automatically" only for an instance that really is on the backoff. The docs table gains the row. Pin the held wording for both the configuration and the credential case, and keep the unreachable case as a control.

Dedupe

#27992 / PR #28014 (the retry path), #27237 (stored-credential hold), #3017 (degraded instances). No open card covers the refusal wording.

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 · 2026-10-30T08:54Z

    ⛔ 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-30T09:02Z
    Session: session_016WV4cw8ZC8W9Jeq9E7gY3X (card thread; seat session_016WV4czuTWNgKR22fKv7jia)
    Account: os-elon-musk
    Branch: claude/project-thread-0vmpzv (the card thread's platform-assigned branch — the recorded platform exception; amended by the seat when the thread reported it)
    Worktree: objectstack-issue-28016
    Domain: domain:server
    Seat: domain:server#3
    File surface: packages/services/service-automation/src/plugin-extension-api.ts (registerDegradedConnector and the degraded record, to carry held), packages/services/service-automation/src/engine.ts (the thin delegate and its read accessor only), packages/services/service-automation/src/plugin.ts (pass held where the instance is held), packages/services/service-automation/src/builtin/connector-nodes.ts (the dispatch refusal), content/docs/automation/connectors.mdx (the failure-modes row), tests under packages/services/service-automation/src/, .changeset/*.
    Container & model: M, mode:thread, model: opus (TIER_DEFAULT), effort: high
    Clause-②: no
    Metadata-protocol: none
    Responsibility: degraded/held connector reporting in service-automation (dispatch refusal wording) and its docs row.
    Thread-read: 6518917181
    Premise: holds (PR #28014 is on main; triage 6518917181 read the sentence as false now)
    Serial constraints cleared: open PR #27951 (seat 4) edits service-automation/src/engine.ts (+65 lines, resume paths); this card touches only the connector delegate region. The card thread merges main and re-runs gates before opening its PR if #27951 has landed by then, and reports any overlap.

  3. objectstack-fleet commented on Oct 30, 2026

    @objectstack-fleet
    ContributorAuthor

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

    {
      "status": "done",
      "branch": "claude/project-thread-0vmpzv",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/28037",
      "session": "session_016WV4cw8ZC8W9Jeq9E7gY3X",
      "premise_still_valid": true,
      "summary": "The engine's degraded-connector record now carries a hold (`degradedHold`: `declaration` or `credential` + ref), set by plugin.ts at the configuration-fault hold (#27992) and the refused-credential hold (#27237; stored value -> credential, no credentialRef -> declaration). A connector_action dispatch to a held instance says what re-attempts it (edit the declaration / set credential '<ref>' again, or restart) and that the platform does not retry it; an instance on the backoff keeps 'the platform retries automatically'. The engine's DEGRADED warn follows. connectors.mdx gains the configuration-fault-on-retry row; changeset @objectstack/service-automation patch.",
      "tests": "New connector-held-dispatch-refusal.test.ts (4) + connector-credential-door.test.ts (+3). Red on main: Tests 4 failed | 25 passed (29), controls green. Fix: 5 related files 93/93. Ablations via scripts/ablation-replace.mjs, each restored blob == HEAD: node reader -> 4 failed | 26 passed (30); plugin credential hold -> 3 failed | 27 passed (30); plugin configuration hold -> 1 failed | 3 passed (4). Package suite: 224 files, 2848 passed | 1 expected fail.",
      "gates": "dispatch-gates --commands at 824e0f5d: 92 derived, 92 run, all exit 0 (check:skill-examples and check:dual-build-cjs-loads exit 3 on the closure build, 0 after a whole-tree turbo build); --ran: 92 accounted, 0 NOT-MEASURED. pnpm lint exit 0; service-automation typecheck exit 0. CI on the PR: pending.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "6 — mcp__github__issue_read x2, mcp__github__pull_request_read x4 (reads only)",
      "api_writes": "2 — fleet-write relay: pr_create (#28037); this comment",
      "open_questions": [],
      "out_of_scope_findings": [
        "docs/adr/0097-declarative-connector-instances.md:190 still says a dispatch to a husk fails with 'the platform retries automatically'; after #28037 that holds only for an instance on the backoff. Governed ADR, outside the surface · noted in the PR, not filed",
        "carrier: PR #28037 Acceptance notes · noted, not filed"
      ]
    }

    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 #28037 comment 6520341703 · 2026-10-30T10:19Z · ready + auto-merge armed through the relay. ADR-0097 wording: #28038 (governed).

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