Skip to content

docs(adr): ADR-0135's two prose citations of the code name what the code now says - #18344

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-14361-adr-0024-citations
Sep 16, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-14361-adr-0024-citations

Conversation

@os-try-charles

Copy link
Copy Markdown
Collaborator

Fixes #14361

Third and final segment. Segments 1 and 2 (PR #18228, last commit 0f95f4341) handled the 152 citations under packages/** and content/docs. This segment is the remainder: every unqualified ADR-0024 under docs/adr/.

Clause-②: no

The instrument is wrong in both directions

The dispatch handed me a population of 21 bare lines in 7 files, measured as "lines matching ADR-0024, minus lines containing cloud ADR-0024". I reproduced that 21 exactly. Then I re-measured per occurrence instead of per line:

instrument count
ADR-0024 occurrences under docs/adr/ 35
lines matching, minus lines containing cloud ADR-0024 21
occurrences whose preceding token is not cloud (backticks allowed) 18
  • 4 false positives. ADR-0135 lines 3, 31, 232, 271 spell the qualifier with backticks in the middle — `objectstack-ai/cloud` ADR-0024 and `cloud` ADR-0024. The literal-string filter does not see the qualifier. They are qualified and correct.
  • 1 false negative. ADR-0135 line 248 begins `ADR-0024 V1` and also contains `cloud ADR-0024` later in the same line, so grep -v discarded the whole line — hiding a bare citation. It is one of the two defects below.

21 − 4 + 1 = 18. A third artifact is invisible to any line filter: ADR-0135 line 79 begins ADR-0024 chose the other direction, and its qualifier cloud is the last word of line 78. Line-wrapped, therefore qualified.

Controls for every zero reported here are in the dev report.

Verdicts — 18 occurrences, each checked against the other end

The D-letter test that segments 1 and 2 used has zero resolving power here (0 of 18 carry a D clause letter), so every row is a read of the cited record.

Local docs/adr/0024-mcp-connectors.md — 10 sites, all correct

site claim made other end verdict
0023-openapi-to-connector-generator.md:148 "the complementary path — wrapping live MCP servers as connectors" explicit link ./0024-mcp-connectors.md; title is MCP Servers as Connectors correct
0024-mcp-connectors.md:1 the record's own H1 self correct
0025-plugin-package-distribution.md:7 Related list, labelled "(connectors)" explicit link correct
0025-plugin-package-distribution.md:395 "ADR-0024 (MCP connectors), any integration describable by OpenAPI/MCP is a declarative connector config" ADR-0024 TL;DR: one adapter, "no per-server code" correct
0025-plugin-package-distribution.md:529 Related list explicit link correct
0036-app-as-rest-api-and-mcp-server.md:5 "MCP as connectors — the inbound sibling: ObjectStack consuming external MCP servers" ADR-0024 section 1 ships @objectstack/connector-mcp, an adapter that connects to MCP servers — inbound correct
0097-declarative-connector-instances.md:5 Builds-on, "(MCP servers as connectors)" explicit link correct
0097-declarative-connector-instances.md:199 "sandboxed execution remains the enterprise tier (ADR-0024 §4)" ADR-0024 ### 4. tier table, enterprise row, reads "sandboxed stdio execution" correct — exact
0097-declarative-connector-instances.md:205 "MCP credentials ride the transport (ADR-0024)" ADR-0024 ### 3. "Credentials and config live with the MCP server… transport env/headers carry credentials" correct — exact
0101-mcp-stdio-principal-admission.md:5 "ADR-0024 §4 (trust model)" ### 4. is the open/enterprise boundary carrying the trust assumption correct

The two section citations are also structurally disambiguating: the local record numbers its sections ### 1.### 5., while cloud ADR-0024 letters its clauses D1…D10/V1. A §4 cannot be a cloud clause.

docs/adr/0135-identity-and-access-architecture.md — 8 sites, 6 correct, 2 fixed

line text kind other end verdict
54 "A bare ADR-0024 in this repository's code does NOT resolve to this record" mention 0024-mcp-connectors.md exists and is unrelated; 0071 here is Dataset semantic-layer depth as the same sentence claims correct — adding cloud inverts it
63 git grep -n -E "ADR-0024" -- packages/… literal re-ran the command verbatim: 14 lines, 0 unqualified. The sentence is explicitly scoped "on the commit that introduced it… measured 64", so it is historical and still true correct — editing it breaks the command
79 ADR-0024 chose the other direction use cloud is the last word of line 78 correct — line-wrap artifact
196 "the clause this repository's code cites as ADR-0024 ②" mention the live source cites ADR-0135 D6auth-manager.ts 2793/3667/6654, auth-plugin.ts 2796, register-sso-provider.ts 316, auth-route-ledger.ts 238–239. ADR-0024 ② survives only in CHANGELOGs fixed
246 "a bare ADR-0024 citation in this tree is not mechanically re-pointable" mention correct
248 "auth-manager.ts cites ADR-0024 V1" mention auth-manager.ts:3661 reads cloud ADR-0024 V1 fixed
260 "Whether any individual bare ADR-0024 citation should move" mention correct
265 "A reader who follows an ADR-0024 citation out of plugin-auth" mention correct

The two fixes

Both are present-tense descriptions of what this repository's code says. Both were true when the record was written and were made false by segments 1 and 2 of this same card.

Line 196. Under either reading the line was wrong. Read as a quotation of the code, it quotes a string the live source no longer contains. Read as naming the cloud clause, it is a bare cloud citation, which Prime Directive #13 forbids and which resolves against this registry to 0024-mcp-connectors.md — a record numbered 1–5 with no clause ②. The fix names the cloud clause and the spelling the code now uses, so both readings land.

Line 248. A one-token insert. The same sentence already prescribes "those keep the cloud ADR-0024 spelling"; auth-manager.ts now does, and the quotation did not.

Everything else is untouched. No citation that was already correct was moved.

Left alone, deliberately

ADR-0135's Consequences bullet (line 265 ff.) reads "Until then the citation still resolves to docs/adr/0024-mcp-connectors.md". Its antecedent has now passed: the verbatim grep on line 63 returns 0 unqualified citations in plugin-auth/src and platform-objects/src/identity. The citation on that line is a correct mention, so it is not a defect of the kind this card is about; the surrounding tense is merely spent, and rewriting a mirror record's Consequences prose is a maintainer's call, not a per-site citation call. Flagged rather than edited — say the word and it moves in this PR.

维护者速读(草稿)

改了什么 —— docs/adr/0135-identity-and-access-architecture.md 两处散文里对「本仓代码怎么引用」的描述,改成代码现在真正写的样子。共 7 增 6 删,只动这一个文件。

为什么改 —— 这两句话在写下时是真的,是 #14361 前两段自己把它们变假的。196 行说域名验证子句「本仓代码引作 ADR-0024 ②」,而活代码七处已经引 ADR-0135 D6,ADR-0024 ② 只剩在 CHANGELOG 里;它同时还是一个裸的 cloud 引用,按 Prime Directive #13 会解析到本仓的 0024-mcp-connectors.md,而那份记录分节是 1–5,根本没有子句 ②。248 行把 auth-manager.ts 引述成 ADR-0024 V1,文件里写的是 cloud ADR-0024 V1 —— 恰是同一句话下半段要求保留的拼写。

风险与代价(含回滚) —— 纯散文,零代码、零发布物。docs/adr/** 不在任何包的 files[] 里(70 个声明了 files[] 的包全部为 0 命中),所以无 changeset。回滚 = revert 这一个 commit,没有任何下游。唯一的判断风险是 196 行的改写:它比 248 行多改了几个字,如果您认为镜像记录应当只记 cloud 的字母而不提本仓代码今天的拼写,把它退回成 `cloud ADR-0024` 的子句 ② 即可,一行的事。

席位意见 ——

你要做的 —— 这是治理面,需要您手工批准并合并;席位不入队、不武装 auto-merge。请特别看一眼「Left alone, deliberately」那一节:ADR-0135 Consequences 里的 "Until then" 已经过期,我没有动它,因为改镜像记录的 Consequences 散文不该由 dev 自己决定。您说改我就在本 PR 里改。

Acceptance notes

  • docs/adr/** is a governed surface. Draft, maintainer-merged. Not queued, auto-merge not armed.
  • Changeset: skipped, measured. 70 workspace packages declare files[]; 0 of them ship any docs/adr path, and docs/ contains no package.json, so docs/adr/** is not inside a workspace package at all. Fire control on the same scan: all 70 ship a dist entry. Nothing published moves.
  • Population after this PR: 35 occurrences, 19 qualified, 16 unqualified — all 16 verdicted correct above.
  • noted, not filed: the "Until then" tense in ADR-0135's Consequences, above. Carrier named: this PR's reviewer.
  • noted, not filed: the line-based grep -v 'cloud ADR-0024' recipe is quoted inside ADR-0135 line 63 itself and mis-bins 5 of 21 sites. It is correct as written there (that sentence counts citing lines at a past commit), so there is nothing to fix; but anyone reusing that recipe as a population filter will inherit the same 4 false positives and 1 false negative. Carrier: none — no open PR or queued card reuses it.

Verification

All 19 gate families derived by scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack (which takes the change set from the merge base itself) are green at c4d13026b. check:doc-formula-expressions first exited 3 — PREREQUISITE NOT MET, which is not a finding; after turbo run build --filter=@objectstack/formula --filter=@objectstack/lint it exits 0.

pnpm lint is not owed and is not narrowed — it is not measured because the population is empty. eslint's own verdict on the only file in this diff is File ignored because no matching configuration was supplied, eslint.config.mjs contains no markdown entry, and line 328 of that config records that no parserOptions.project and no typed rules are enabled, so this diff cannot move any untouched file's verdict.


🤖 Generated with Claude Code

https://claude.ai/code/session_017ef78bLdybu3AffehKkhfk


Generated by Claude Code

…ode now says

The mirror record describes, in the present tense, how this repository's code
cites two cloud clauses. Both descriptions were true when the record was written
and are false against the tree today:

- D6 said the domain-verification clause is "the clause this repository's code
  cites as `ADR-0024 ②`". The live source cites `ADR-0135 D6` (auth-manager.ts
  2793/3667/6654, auth-plugin.ts 2796, register-sso-provider.ts 316,
  auth-route-ledger.ts 238-239); `ADR-0024 ②` now survives only in CHANGELOGs.
  The bare form was also a bare cloud citation, which Prime Directive #13 forbids
  and which resolves against this registry to `0024-mcp-connectors.md` — a record
  whose sections are numbered 1-5 and that has no clause ②.

- The #14361 consequence note quoted auth-manager.ts as citing `ADR-0024 V1`.
  That file reads `cloud ADR-0024 V1`, which is the spelling the same sentence
  goes on to prescribe.

Every other unqualified `ADR-0024` under docs/adr is correct and is left alone:
ten are the local MCP-connector record (verified against its own sections 3 and
4), and the rest are mentions of the bare string as a string, a line-wrapped
`cloud ADR-0024`, and a literal grep pattern.

Co-authored-by: Claude <noreply@anthropic.com>
@github-actions github-actions Bot added size/s documentation Improvements or additions to documentation labels Sep 16, 2026
@os-try-charles os-try-charles added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 16, 2026 — with Claude
@os-try-charles
os-try-charles marked this pull request as ready for review September 16, 2026 00:33
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[finding] The SCIM/identity ADR-0071 citation resolves to the dataset semantic-layer record — 39 files point at a decision about multi-hop joins

3 participants