Repository navigation
docs(adr): ADR-0097 records that a held degraded connector instance is not retried - #28161
Conversation
…s not retried The degraded-instance section said every husk's dispatch refusal promises "the platform retries automatically". Since #27992 and #27237 a held instance (a configuration fault met on a retry, a refused stored or declared credential) is skipped by the backoff timer and by an unchanged reconcile, and #28016 makes its refusal name the edit or the credential that unblocks it. A dated amendment note records this beside the kept bullets, plus the matching Amended-by entry. Fixes #28038 Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cypdG8XcEafFNG2EFa
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head f4345a9 · 2026-10-30T14:48Z |
…redential, and code-spans the ref placeholder Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cypdG8XcEafFNG2EFa
… sentence contradicted Co-authored-by: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016WV4cypdG8XcEafFNG2EFa
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract-review-claim: session_016WV4d1QkPVVzNz3FJqb2iS · head 1a9e3f7 · 2026-10-30T15:17Z |
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS Contract reviewHead-sha: Inputs: this is a delta review over the first record (the PASS on ① Derived judgments
② Semver levelNo release. ③ Boundary flags
④ Design judgmentRules face,
Implemented-by: VERDICT: PASS Must-fix: none. Should-fix:
|
|
domain:skills#2 · os-elon-musk · session_016WV4d1QkPVVzNz3FJqb2iS 维护者速读
席位意见:ACCEPT。契约复核分两轮:
席位核对
|
Requested by Elon · project thread
domain:skills#2 · os-elon-musk · session_016WV4cypdG8XcEafFNG2EFa
Fixes #28038
Clause-②: no
Metadata-protocol: none
维护者速读
docs/adr/0097-declarative-connector-instances.md。在「Upstream availability」降级小节的三条要点之后加一条 2026-10-30 的修订注(按本 ADR 已有的> **Amendment note (日期, #卡)**惯例),原句保留不动;头部Amended by追加一条对应记录。Status 行不记修订,未改。sys_connector_credential+ open-tier resolver chain (env → credential object → vault), reconcile on credential change, install-local prompt for missingcredentialRefs (ruling A on #27230) #27237 之后,有些实例是「挂起」的:重试时遇到配置错误,或上游拒绝了已存储的或写在声明里的凭据。这些实例退避定时器不重试,签名不变的 reconcile 也跳过;只有编辑声明、重新设置凭据或重启才会再试。PR fix(service-automation): a dispatch to a held connector instance names its fix, not a retry #28037(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)已让拒绝文案写明解锁方式。ADR 与运行时不一致,本 PR 补记。check:adr-symbol-anchors全部可解析(2843→2850,symbol 623→630)。回滚即 revert。plugin.ts#scheduleDeclarativeRetry的!d.held过滤与builtin/connector-nodes.ts的两种拒绝文案。pnpm check:adr-symbol-anchors,预期 exit 0、2850 个锚全部解析。docs/adr/**),落地需 GOVERNED_APPROVER 批准。What changes
connector_actiondispatch fails with the reason and 'the platform retries automatically'") and the third (the backoff, and "immediately by any reconcile") are kept as written, per Prime Directive [WIP] Add Chinese version of the documentation #13; the note says they now hold only for an instance on the backoff. It records:plugin.ts#failDegradedConnectorInstance), and a credential its upstream refused when the value is stored insys_connector_credentialor written into the declaration (connectors:sys_connector_credential+ open-tier resolver chain (env → credential object → vault), reconcile on credential change, install-local prompt for missingcredentialRefs (ruling A on #27230) #27237,plugin.ts#holdConnectorForRejectedCredential);plugin.ts#scheduleDeclarativeRetry) and so does a reconcile while its signature is unchanged (plugin.ts#reconcileDeclaredConnectors); only an edit of the declaration, setting the stored credential again (the row's revision is part of the signature), or a restart re-attempts it;builtin/connector-nodes.ts#registerConnectorNodes,plugin-extension-api.ts#describeHoldandengine.ts#getConnectorDegradedHold;Amended byheader: one entry for adr (0097): the degraded-instance section still says every husk's dispatch refusal promises "the platform retries automatically"; held instances (#27992, #27237) are not retried #28038 beside the existing 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 and connectors:sys_connector_credential+ open-tier resolver chain (env → credential object → vault), reconcile on credential change, install-local prompt for missingcredentialRefs (ruling A on #27230) #27237 entries. The Status line records no amendments in this ADR, so it is unchanged.Why
#28038 (triage 6521083653): since PR #28014 and #27237 the ADR's degraded section contradicted the runtime, and PR #28037 (merged
b59bf60c8) made the refusal itself say so. Measured onorigin/main27e0bd584:scheduleDeclarativeRetryfilters!d.held;reconcileDeclaredConnectorscontinues onheld?.held && held.signature === signature; the two hold sites setheld: trueand pass aConnectorHoldtoregisterDegradedConnector; the dispatch refusal branches onengine.getConnectorDegradedHold.Verification
All readings at head
f4345a9d, in a fresh worktree afterpnpm install --frozen-lockfile --ignore-scripts(andturbo run build --filter=@objectstack/formula --filter=@objectstack/lintfor the doc-formula gate).check:adr-symbol-anchors: exit 0 on base27e0bd584(2843 anchors, 623 symbol: 597 declaration / 26 literal) and on head (2850 anchors, 630 symbol: 604 declaration / 26 literal). The 7 new anchors all resolve as declarations.check:adr-index: exit 0 (derived; the ADR's title is unchanged).check-governed-merges.mjs --test docs/adr/0097-declarative-connector-instances.md: GOVERNED, 1 of 1 path on the register (Tier H).dispatch-gates --ran: 21 derived families accounted for, 21 run, 0 NOT-MEASURED. No changeset family is derived (docs only), henceskip-changeset.dispatch-gates families (21 derived, 21 run)
Human Minimum
packages/specholds no runtime logic. (not touched)pnpm lintnot run: the diff touches no lintable source, only one ADR .md)main, one pull request.skip-changeset)packages/spectouched: its generated artifacts are regenerated and committed. (not touched)content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.Generated by Claude Code
🤖 Generated with Claude Code
https://claude.ai/code/session_016WV4cypdG8XcEafFNG2EFa