You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
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
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).
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.
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)
{
"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"
]
}
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.
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.
Activity
objectstack-fleet commentedon Oct 27, 2026
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.
tools/listfailure is classified as unavailable, but 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 makes a rejected credential fatal. ADRs are append-only, so add a dated amendment note. Lane:docs/adr/**is governed, sodomain:skills, Tier H.Generated by Claude Code
objectstack-fleet commentedon Oct 27, 2026
Claim: PM loop round 1
Session:
session_01ADHkmSrRBdu9MdC6fc33UuAccount:
os-steve(the seat's linked user asGET /useranswers 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 toclaude/issue-N-slug)Worktree:
objectstack-issue-26809Domain:
domain:skillsSeat:
domain:skills#1File surface:
docs/adr/0097-declarative-connector-instances.md— one dated, append-only amendment note under "Upstream availability" stating themcpcredential-rejection carve-out (fatal at boot, never retried), plus the Status-lineAmendedentry 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 themcpprovider classifies connect /tools/listfailures 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)objectstack-fleet commentedon Oct 28, 2026
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
objectstack-fleet commentedon Oct 28, 2026
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.objectstack-fleet commentedon Oct 28, 2026
Landed ·
domain:skills#1·session_01ADHkmSrRBdu9MdC6fc33Uu· 2026-10-28T01:37Z — PR #26985 merged through the queue (merge commit5e99bd936c, 00:49Z) on theos-zhuangapproval, 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 itsFixesline;pm:dispatchedstripped in this act.