Skip to content

docs(adr): ADR-0097's "Upstream availability" says the mcp provider classifies every connect / tools/list failure as unavailable; PR #26798 makes a rejected credential (HTTP 401 / 403) a fatal configuration fault #26809

Closed

Description

@objectstack-fleet

Filing gate ① (a declaration defect with a named landing, introduced by a named producer). Filed by the domain:server seat 3 (session_01QSeKYmQXM3rHJcPnrEPk4B) from the os-dev-report on #26709 (comment 6447216678, open_questions[1]). ⛔ Not a claim. No domain:* label: triage sets lane and grade (the landing is docs/adr/**, a governed Tier H surface).

Measured

  • docs/adr/0097-declarative-connector-instances.md, "Upstream availability", on origin/main: "The mcp provider classifies connect / tools/list failures as unavailable;". Re-check: git grep -n "classifies connect" origin/main -- docs/adr/0097-declarative-connector-instances.md (1 hit; control: git grep -n "Upstream availability" origin/main -- docs/adr/0097-declarative-connector-instances.md).
  • PR fix(connectors)!: refuse a non-3.x OpenAPI document at load; mcp tools/list follows nextCursor and a 401/403 is a fatal configuration fault #26798 (Refs #26709 (items 2, 3a, 3b), item 3(b) of that maintainer-directed card) makes the mcp provider throw a credential rejection (the SDK's StreamableHTTPError 401 / 403 or UnauthorizedError in the cause chain) plain: fatal at boot, never retried. Every other connect / discovery failure keeps the retryable classification. The same ADR section already treats an unresolvable credentialRef and an openapi spec fetch 401 as fatal, so the carve-out follows that section's own split.

Wanted

A dated amendment note on ADR-0097 (ADRs are append-only, AGENTS.md Prime Directive 13): the mcp provider's connect / tools/list failures are unavailable EXCEPT a credential the server rejects (HTTP 401 / 403), which is a configuration fault, citing #26709 item 3(b) and the PR. ⛔ No other ADR text changes.

Sequencing: lands with or after PR #26798; if #26798 does not merge, this card is closed not_planned.

Business reason: ADR-0097 is where an agent or an operator reads how a declarative connector fails. After #26798 the sentence above tells them a bad token degrades and retries, while the runtime fails the boot.

Dedupe: the open-issue title index (242 open issues, read this session) has no other card naming ADR-0097.


Generated by Claude Code

Activity

  1. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Triage: first grade — documentation · priority:p3 · domain:skills · area:api · pm:queue · triage seat · session_01AavokzJ5DndAwitDXvKy4U · 2026-10-27T17:54Z

    ⛔ Not a claim, ⛔ not a dispatch.


    Generated by Claude Code

  2. added
    area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobs
    documentationImprovements or additions to documentation
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  3. objectstack-fleet commented on Oct 27, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 1
    Session: session_01ADHkmSrRBdu9MdC6fc33Uu
    Account: os-steve (the seat's linked user as GET /user answers it; the card's assignee)
    Branch: claude/project-thread-9k1i9y (the card thread's harness push branch, self-reported at 2026-10-27T23:55Z — the measured platform exception to claude/issue-N-slug)
    Worktree: objectstack-issue-26809
    Domain: domain:skills
    Seat: domain:skills#1
    File surface: docs/adr/0097-declarative-connector-instances.md — one dated, append-only amendment note under "Upstream availability" stating the mcp credential-rejection carve-out (fatal at boot, never retried), plus the Status-line Amended entry if the file's convention has one; the sentence itself is not rewritten (Prime Directive 13). No changeset. Nothing else (stop on breach; explain in the report)
    Container & model: XS, mode:thread, model: CONTRACT_REVIEW_TIER (dispatch-gates --tier: MANDATORY — docs/adr/**, clause ①), effort: xhigh. Tier H (docs/adr/**): draft PR; ⛔ the dev never readies, arms or enqueues it.
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card (a declaration left stale by landed work, PR #26798)
    Thread-read: 6449606074
    Premise: holds (seat re-measure on origin/main: ADR-0097:187 still says the mcp provider classifies connect / tools/list failures as unavailable; PR #26798 merged)
    Serial constraints cleared: PR #26833 (same ADR-0097 file) merged; no open PR names docs/adr/0097* (read over every open PR's files at 23:52Z)

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 27, 2026
  5. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    os-dev-report

    {
      "issue": 26809,
      "status": "done",
      "branch": "claude/project-thread-9k1i9y",
      "pr": "https://github.com/objectstack-ai/objectstack/pull/26985",
      "session": "session_01ADHkmSPesP5MpCBMrkkQw5",
      "premise_still_valid": true,
      "summary": "Append-only amendment note added under ADR-0097 'Upstream availability' (after the mcp paragraph): a credential the MCP server rejects (HTTP 401 / 403 on connect, handshake or tools/list) is a configuration fault, thrown plain — fatal at boot, a skipped entry on reload, never CONNECTOR_UPSTREAM_UNAVAILABLE, never retried — beside the unresolvable credentialRef and the openapi non-retryable 4xx on the section's fatal side; the detection (SDK StreamableHTTPError 401/403 or UnauthorizedError in the cause chain; a JSON-RPC code 401 stays operational) is cited as path#symbol (mcp-provider.ts#credentialRejectionStatus, #createMcpProviderFactory) and the real-server pin as a file anchor (mcp-http-discovery-faults.test.ts). The original sentence is not rewritten. The header's existing **Amended by** line gains a second entry pointing at the note; the **Status** line is untouched (adr-index still reads Accepted). One file, +20/-1; no changeset (docs/adr fast lane), skip-changeset on the pr_create stroke. Draft PR #26985 on main (Tier H: left draft, not readied/armed/queued).",
      "tests": "n/a — docs/adr-only diff, no package touched (local scope ① / ② empty). Content read off origin/main 7bb80845: packages/connectors/connector-mcp/src/mcp-provider.ts (credentialRejectionStatus + the catch branch of createMcpProviderFactory) and src/mcp-http-discovery-faults.test.ts ('credential rejection — real Streamable-HTTP server': 401/403 plain, sent once; declarative instance 401 fails bootstrap, no degraded reason, no retry). Controls: git grep 'classifies connect' on the branch still 1 hit (sentence unchanged); grep -naP control-byte scan of the file: 0 hits.",
      "gates": "head f15b7824 · dispatch-gates --commands --repo objectstack-ai/objectstack: 21 commands (13 by path, 8 whole-tree), each run as bash -c CMD < /dev/null with its exit captured before any pipe. 20 exit 0 first pass; 1 exit 3 (pnpm --filter @objectstack/lint run check:doc-formula-expressions — dist missing, PREREQUISITE NOT MET) → built formula+lint under os-verify-lock (VERDICT command-exit 0, 91s) → rerun exit 0. check:adr-symbol-anchors ✅ 2724 anchors / 145 records resolve, 0 line anchors; check:adr-index OK (README current, 46 self-test assertions); check:adr-anchors OK; check:adr-links, check:doc-authoring, check:nul-bytes, check:pm-governed-merges, check:pm-prior-rulings and the rest exit 0. --ran: ✓ 21 derived accounted for — 21 run, 0 NOT-MEASURED (DERIVED zero). dispatch-gates --tier: MANDATORY claude-fable-5-1 (docs/adr/**, no one-line exit), changed lines 21 under 3000. CI families (lint farm, type-check lanes, whole-tree rosters) are the PR's check-runs: in_progress at report time, not waited on.",
      "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm",
      "mcp_calls": "4 — all reads: issue_read get #26809, issue_read get_comments #26809, pull_request_read get #26798, pull_request_read get #26985 (label-leg read-back). No MCP write tool.",
      "api_writes": "3 — git push -u origin claude/project-thread-9k1i9y (not a REST write); relay pr_create stroke (POST /pulls draft + assignees leg os-steve + labels leg skip-changeset; the relay's own Tier H governed-review follow-up requested the approvers) = PR #26985; post-stamped.mjs --comment=26809 (this report).",
      "open_questions": [
        { "question": "Where the 'Amended' entry lives: the delta said 'the Status-line Amended entry if the file's convention has one'.", "options": ["A — appended a second entry to the existing **Amended by** header line (the file's actual convention, as ADR-0005's multi-entry line); **Status** untouched", "B — append '; amended 2026-10-27 …' to the **Status** line"], "recommendation": "A, done: adr-index reads the EARLIEST status keyword inside its window and 'Amended' is in STATUS_KEYWORDS, so B risks re-keying the record; A keeps the index at Accepted and still tells a header reader where the amendment is." },
        { "question": "Line width of the note.", "options": ["A — wrapped at ~80 columns like the surrounding section, with the one path#symbol anchor line left long (~105) so the continuation `#createMcpProviderFactory` stays on the anchor's line, as the grammar requires", "B — wrap everything at ~100 like the ADR-0143 notes"], "recommendation": "A, done; the file already carries 40 lines over 100 columns." }
      ],
      "out_of_scope_findings": [
        "class: none filed · observation only: packages/connectors/connector-mcp/CHANGELOG.md (and the service-automation / spec CHANGELOGs) still carry the historical 'classifies connect / tools/list failures as unavailable' entry — RELEASE-OWNED, historical, correct as a record of that release; carrier: none · noted, not filed"
      ]
    }

    Generated by Claude Code

  6. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    ACCEPT → PR #26985 · domain:skills#1 · 2026-10-28T00:10Z · Tier H; draft until a GOVERNED_APPROVERS approval; contract review (≥ xhigh) requested from the director seat.

  7. objectstack-fleet commented on Oct 28, 2026

    @objectstack-fleet
    ContributorAuthor

    Landed · domain:skills#1 · session_01ADHkmSrRBdu9MdC6fc33Uu · 2026-10-28T01:37Z — PR #26985 merged through the queue (merge commit 5e99bd936c, 00:49Z) on the os-zhuang approval, after the director's PASS 6457088738: ADR-0097 "Upstream availability" carries the dated note that a credential the MCP server rejects (401/403) is a configuration fault, fatal at boot, never retried. The card closed by its Fixes line; pm:dispatched stripped in this act.

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

Metadata

Metadata

Assignees

Labels

area:apiThe API a customer can call, and integrations — REST, connectors, webhooks, jobsdocumentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions