Repository navigation
Commit d745bb5
docs(adr): ADR-0143 accepted — the maintainer's Q1–Q4 decisions recorded; D2.1, D2.3, D3, D4 and D7 state what they settle (#27231)
<!-- claude-projects-attribution: {"github_login":"os-steve"} -->
_Requested by **Steve** · [project
thread](https://claude.ai/code/project/chan_01FdL1XeUyvVNxLreh3F4Qi9?thread=cmsg_01FdL1XeUyvVNxLreh3F4Qi9BaU5Bf8FsJVKEf1GxktFtv)_
Part of #26768
Clause-②: no
Metadata-protocol: none
Ruling-ref:
#26768 (comment)
## 维护者速读
- 改了什么:把你 10-28 对四个决定的答复(「同意」)写进 ADR-0143,状态从 Proposed 改为 Accepted;同时让
D2.1、D2.3、D3、D4、D7 与答案一致。
- 四个答案:Q1 组织共享(补「无组织的运行」规则);Q2 专用连接对象,只存 refresh token、动态注册的客户端和状态;Q3
MCP 实测改用 Notion,HubSpot 作第二案例;Q4 `alipay-v3` / 阿里云 ACS3 / 腾讯云
TC3,签名接口带响应验签。
- 为什么改:#26702、#26710 的 spec / 运行时 / 控制台切片都在等这份记录变成 Accepted。
- 风险与回滚:纯文档,无代码、无 spec 变更。回滚即撤掉本 PR,ADR-0143 回到 Proposed。
- 先看:`docs/adr/0143-outbound-connector-auth-is-open-tier.md` 里四个
**Decision (2026-10-28)** 段落,以及 D4 末尾新加的无组织运行规则。
- 需要你做的:受管 PR,等 os-zhuang 或 hotlong 批准。
## What changes
`docs/adr/0143-outbound-connector-auth-is-open-tier.md`:
- **Status** is now Accepted, dated 2026-10-28. **Deciders** quotes the
ruling 「同意」, given to an independent analysis of Q1–Q4.
- **Q1–Q4.** Each keeps its options as drafted and gains a `**Decision
(2026-10-28)**` paragraph. Q3 departs from the drafted recommendation,
and says so.
- Q1: A, organization-shared.
- Q2: B, a dedicated connection object, scoped by D3.
- Q3: A revised. Notion's hosted MCP server is the live
dynamic-registration proof, and HubSpot is the pre-registered-`clientId`
case, live or as a contract test. Then Feishu, an Alipay v3 sandbox
query over https, and `client_credentials` plus a registration contract
test against the embedded `@better-auth/oauth-provider`.
- Q4: A, with three conditions: `alipay-v3` replaces `alipay-rsa2`; the
signer seam carries response verification; the test-vector rule is
relaxed.
- **D2.1.** On `provider: 'mcp'`, endpoints and `clientId` may also be
supplied, for vendors without dynamic client registration (HubSpot).
- **D2.3.** Test vectors reproduce a complete vendor example byte for
byte where one is published; otherwise they come from the vendor's
official SDK test suite, with SDK and version named. The signer seam
gains an optional response-verification step, which `alipay-v3`
implements.
- **D3.** Only what cannot be re-obtained unattended is persisted: the
refresh token, the dynamically registered client, and status, scopes and
expiry. Access tokens, including every `client_credentials` and
`app-credential` token, stay in an in-process cache.
- **D4** gains the organization-less run rule. A run with no
organization (a schedule) uses the instance's connection only when
exactly one exists; otherwise it is refused. It never falls back to an
arbitrary connection.
- **D7.** `ConnectorOAuth2Schema` is retired through ADR-0087, not
redefined.
- **Acceptance** follows Q3 and Q4. That means Notion via dynamic
registration with refresh-token rotation, Alipay v3 over https on
`alipay-v3` with response verification, and the embedded-server contract
test.
`docs/adr/README.md` is regenerated by `node scripts/adr-index.mjs`:
ADR-0143's row, and Accepted 125→126 / Proposed 5→4.
Forced test edits: none.
## Tests
Docs-only diff with no package touched, so no build, unit test or
typecheck is owed. The derived gate family ran (see Verification).
## Acceptance notes
- **Vendor facts behind the Q3 / Q4 decisions** (pages fetched
2026-10-28; the ADR cites the first two):
- HubSpot remote MCP: PKCE required, no dynamic client registration; the
client is pre-registered in HubSpot.
- Notion MCP: RFC 7591 registration, S256 PKCE, refresh token rotated on
every refresh.
- Aliyun ACS3: publishes a complete worked example with its final
signature.
- Tencent TC3: its example masks the SecretKey.
- Alipay's v3 protocol page is robots-blocked. Its `openapi.yaml`
(alipay-sdk-java-all, `v3/api/`) declares no `securitySchemes`, and its
sandbox server entry is plain http.
- New WeChat Pay merchants verify against a fixed platform public key.
- **Code facts, re-read on `origin/main` at `cdec7473`.**
- `sys-account.object.ts`: `(provider_id, account_id)` is indexed
`unique: 'global'`. The comment beside the token columns says they are
deliberately not retyped to `Field.secret()` and that
`encryptOAuthTokens` is unset.
- `runtime-identity.ts#resolveRunDataContext`: a schedule resolves no
user and no organization.
- `auth-manager-plugin-list.ts` sets `allowDynamicClientRegistration`.
- **Ruling.** Steve's two messages, the 09:39Z request for an
independent analysis with a recommendation per question and the 11:22Z
reply 「同意」, are recorded verbatim on #26768 in ruling record 6467737978.
The ADR quotes 「同意」 and describes the request in words.
- **Not in this PR:** card item 3, the cloud-repository record with a
`## Provenance` pointer. It is still owed, and this lane cannot reach
that repository.
- **Tier H.** This PR is a draft and waits for an approval from a
`GOVERNED_APPROVERS` account. It is not readied, armed or queued from
here.
## Verification
<details><summary>Derived gate family: 21/21 exit 0, --ran reconciles
21/21, 0 NOT-MEASURED (derived zero)</summary>
The gates ran on `97b63d2b`. The pushed head `5fada82b` is the same
tree; only the commit message was reworded, to drop a card trailer that
the pre-push `check:commit-card-trailers` refused.
`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` listed 21 commands:
```
node scripts/check-adr-links.mjs :: exit 0
node scripts/check-adr-links.mjs --self-test :: exit 0
node scripts/check-closing-keyword-parity.mjs :: exit 0
node scripts/check-closing-keyword-parity.mjs --self-test :: exit 0
node scripts/check-comment-mask-corpus.mjs :: exit 0
node scripts/ci/plan-test-core-shards.mjs --self-test :: exit 0
pnpm --filter @objectstack/lint run check:doc-formula-expressions :: exit 0
pnpm check:adr-anchors :: exit 0
pnpm check:adr-index :: exit 0
pnpm check:adr-symbol-anchors :: exit 0
pnpm check:ci-filter-parity :: exit 0
pnpm check:closed-ceremony-text :: exit 0
pnpm check:cross-package-test-inputs :: exit 0
pnpm check:doc-authoring :: exit 0
pnpm check:driver-memory-census :: exit 0
pnpm check:gitlink-declared :: exit 0
pnpm check:nul-bytes :: exit 0
pnpm check:pm-governed-merges :: exit 0
pnpm check:pm-prior-rulings :: exit 0
pnpm check:refd-timer-probe :: exit 0
pnpm check:watch-hint-literal :: exit 0
```
`--ran` result: "21 derived famil(ies) accounted for — 21 run, 0
NOT-MEASURED (a DERIVED zero — all 21 recorded an exit code and none of
them is 3)".
</details>
---
_Generated by [Claude
Code](https://claude.ai/code/session_01ADHkmP2wqmTYar443bTqhK)_
Co-authored-by: Claude <noreply@anthropic.com>1 parent 2594f5b commit d745bb5
2 files changed
Lines changed: 103 additions & 27 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
4 | | - | |
5 | | - | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
9 | | - | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
10 | 13 | | |
11 | 14 | | |
12 | 15 | | |
| |||
148 | 151 | | |
149 | 152 | | |
150 | 153 | | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
151 | 157 | | |
152 | 158 | | |
153 | 159 | | |
| |||
163 | 169 | | |
164 | 170 | | |
165 | 171 | | |
166 | | - | |
167 | | - | |
168 | | - | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
169 | 180 | | |
170 | 181 | | |
171 | 182 | | |
172 | 183 | | |
173 | 184 | | |
174 | 185 | | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
180 | 194 | | |
181 | 195 | | |
182 | 196 | | |
| |||
197 | 211 | | |
198 | 212 | | |
199 | 213 | | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
200 | 219 | | |
201 | 220 | | |
202 | 221 | | |
| |||
213 | 232 | | |
214 | 233 | | |
215 | 234 | | |
216 | | - | |
| 235 | + | |
217 | 236 | | |
218 | 237 | | |
219 | | - | |
220 | | - | |
221 | | - | |
| 238 | + | |
| 239 | + | |
| 240 | + | |
| 241 | + | |
222 | 242 | | |
223 | 243 | | |
224 | 244 | | |
| |||
234 | 254 | | |
235 | 255 | | |
236 | 256 | | |
237 | | - | |
238 | | - | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
239 | 260 | | |
240 | 261 | | |
241 | 262 | | |
| |||
259 | 280 | | |
260 | 281 | | |
261 | 282 | | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
262 | 287 | | |
263 | 288 | | |
264 | 289 | | |
| |||
282 | 307 | | |
283 | 308 | | |
284 | 309 | | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
285 | 323 | | |
286 | 324 | | |
287 | 325 | | |
| |||
298 | 336 | | |
299 | 337 | | |
300 | 338 | | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
301 | 360 | | |
302 | 361 | | |
303 | 362 | | |
| |||
312 | 371 | | |
313 | 372 | | |
314 | 373 | | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
| 386 | + | |
315 | 387 | | |
316 | 388 | | |
317 | 389 | | |
| |||
336 | 408 | | |
337 | 409 | | |
338 | 410 | | |
339 | | - | |
340 | | - | |
341 | | - | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
342 | 416 | | |
343 | 417 | | |
344 | | - | |
345 | | - | |
346 | | - | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
347 | 423 | | |
348 | 424 | | |
349 | 425 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
| 20 | + | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
210 | 210 | | |
211 | 211 | | |
212 | 212 | | |
213 | | - | |
| 213 | + | |
214 | 214 | | |
215 | 215 | | |
216 | 216 | | |
| |||
0 commit comments