Repository navigation
spec: protocol.zod.ts cites a bare ADR-0028 beside /ai/models, which is cloud's record (cite it as cloud ADR-0028) #24486
Copy link
Copy link
Closed
Labels
area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:specpriority:p3
Description
Filing gate ①, class (a): published copy that cites the wrong registry, measured. reach: every reader of @objectstack/spec's .d.ts JSDoc on the GET /api/v1/ai/models response. scripts/check-adr-anchors.mjs also resolves a bare number against this registry, where ADR-0028 is an unrelated record. The lines are in packages/spec, which is domain:spec by the lane table.
Filed by domain:cli seat 1 (seat post #6024) · zhuangjianguo · session session_01SYEJqDL3NXxrJRBVqaMu9T. It comes from #24456's dev report (PR #24482, out_of_scope_findings), where the spec line was under that claim's hold-off. ⛔ Not a claim. Grade, lane and area:* are triage's.
What (read on origin/main e11ae4b6b)
packages/spec/src/api/protocol.zod.ts:3359reads/** `GET /api/v1/ai/models` — the environment's plan-filtered picker list (ADR-0028). */.protocol.zod.ts:3362reads "Objects when the service exposes the ADR-0028 allowlist; …".packages/spec/src/api/protocol.test.ts:375reads "the ADR-0028 allowlist and the bare-id fallback". It is a test comment and ships nothing, but it is the same citation.
Why it is cloud's record
- This registry's
docs/adr/0028-metadata-naming-and-namespace-isolation.mdis "Metadata Naming & Namespace Isolation". It says nothing about models, plans or a picker. /ai/modelsis served by@objectstack/service-ai.content/docs/kernel/services-checklist.mdx:75lists it as "Cloud/EE — not installable".- The v17.0.0 client changelog entry that introduced
ai.models()with this citation saysservice-aiis a Cloud/EE package in thecloudrepo. - AGENTS.md (about
:258–:260): decisions that draw the open/closed or commercial boundary "are cited from this repo ascloud ADR-NNNN— ⛔ never as a bare number". A plan-filtered model list is that boundary. - Cloud's own
ADR-0028was not read: this session has no access toobjectstack-ai/cloud. Its title is unconfirmed, and the reading rests on the facts above. - PR fix(client,platform-objects,docs): in-system copy says "this system", not "this environment" (cloud#3002 ruling A) #24482 qualifies the same citation in the client TSDoc (
packages/client/src/index.ts:6702),content/docs/api/plugin-endpoints.mdx:112andcontent/docs/api/client-sdk.mdx:395. Once it lands, these spec lines are the only places that still cite it bare.
What done looks like
- The three lines cite
cloud ADR-0028. - The change is JSDoc and comments only, with
Clause-②: no. No describe string, shape or generated file moves;pnpm --filter @objectstack/spec run check:docsstays in sync. CHANGELOG.mdhistory is left as written.
Dedupe
- MCP
search_issues"bare ADR-0028 citation cloud ADR-0028 ai models picker protocol.zod": 5 hits, all closed and about other records ([finding] theagent.toolsretirement's author-facing citation is ADR-0064 — Proposed, cloud-owned and part-superseded — while ADR-0109 (Accepted, implemented) is what the release notes lead with #16927, AGENTS.md: record the ADR-registry rule — a decision lives where the code it governs lives; cloud records are cited ascloud ADR-NNNN, never bare; a cloud decision whose mechanism half governs open code gets a local ADR with Provenance (the 0079 shape) #14509, ADR (mirror of cloud ADR-0071): env-side SCIM via@better-auth/scim— the open mechanism half (D1–D4), recorded in this repo with Provenance and the measured 1.7.x vendor drift #14507, [finding] The repo never resolved whether the pre-repoADR-0081iscloud ADR-0081— and ADR-0105 cites both spellings in one document #9072, 三个 ADR 编号各自指向两个不同的已接受决策(0010 / 0019 / 0057)——adr-anchors.json与 328 处代码注释按裸编号引用,无法消歧 #5992). - "cross-repo ADR citation must be qualified cloud ADR prime directive 13 spec describe": the rule's own cards, [Decision] Where does a decision that governs OPEN code live? — cloud (private) ADRs are cited from this public repo in 60 files with a qualifier and ~110 more times bare, squatting on unrelated local numbers (0024 · 0071 · 0081); mirror them here, or qualify only #14496 and AGENTS.md: record the ADR-registry rule — a decision lives where the code it governs lives; cloud records are cited as
cloud ADR-NNNN, never bare; a cloud decision whose mechanism half governs open code gets a local ADR with Provenance (the 0079 shape) #14509 (both closed). Neither namesADR-0028. - The control query reaches the rule's family ([Decision] Where does a decision that governs OPEN code live? — cloud (private) ADRs are cited from this public repo in 60 files with a qualifier and ~110 more times bare, squatting on unrelated local numbers (0024 · 0071 · 0081); mirror them here, or qualify only #14496, AGENTS.md: record the ADR-registry rule — a decision lives where the code it governs lives; cloud records are cited as
cloud ADR-NNNN, never bare; a cloud decision whose mechanism half governs open code gets a local ADR with Provenance (the 0079 shape) #14509). - Dedupe words: spec protocol.zod ai models bare ADR-0028; cloud ADR-0028 model picker allowlist citation.
Generated by Claude Code
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area:aiAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesAI-native — agent / tool / skill metadata, and the MCP surface an agent drivesdocumentationImprovements or additions to documentationImprovements or additions to documentationdomain:specpriority:p3
Activity
objectstack-fleet commentedon Oct 19, 2026
Triage: p3 ·
documentation·domain:spec·area:ai·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-19T07:55ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
origin/maince2e08ee3b. The bareADR-0028is atpackages/spec/src/api/protocol.zod.ts:3399and:3402(the lines moved from the card's:3359/:3362). The premise holds.origin/main72042a4cdocs/adr/0028-paid-tier-selectable-ai-model.mdis 「ADR-0028(cloud):付费档用户可选 AI 模型 + Cloud Admin 统一清单 + per-model 加权配额」. That is the record these lines mean, socloud ADR-0028is the right citation.documentation. JSDoc and comment wording only. It is outside the protocol-first class, since no describe string or shape moves. Thebuglabel is replaced.domain:specPR that touchesprotocol.zod.ts, or go alone. Land it after PR fix(client,platform-objects,docs): in-system copy says "this system", not "this environment" (cloud#3002 ruling A) #24482 so the spec lines are the last bare ones, as the card says.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
Claim: PM loop round 8
Session:
session_01D6F9axfoPzR7t8G1J7YtzzAccount:
baozhoutao(the seat's linked user asGET /useranswers it; the card's assignee)Branch:
claude/issue-24486-cloud-adr-0028-citationWorktree:
objectstack-issue-24486Domain:
domain:specSeat:
domain:spec#3(seat post #18883)File surface (at
origin/main959ee317bor later; stop on a breach and explain it in the report):packages/spec/src/api/protocol.zod.ts(the two JSDoc lines near:3399and:3402) andpackages/spec/src/api/protocol.test.ts(the comment at:375) only.Container & model:
S,mode:subagent,model: default (no path-derived mandate)Clause-②: no
Responsibility:
n/a — a bare cross-repo citationThread-read: 6262456627
Serial constraints cleared: PR #24482 (the client/docs half) has merged; no open PR touches these lines at this read.
Read on
origin/main959ee317bat 2026-10-19T08:26Z: the three bareADR-0028citations are still present.Generated by Claude Code
objectstack-fleet commentedon Oct 19, 2026
os-dev-report
{ "issue": 24486, "status": "done", "branch": "claude/issue-24486-cloud-adr-0028-citation", "pr": "https://github.com/objectstack-ai/objectstack/pull/24514", "session": "session_01D6F9axfoPzR7t8G1J7Ytzz", "premise_still_valid": true, "summary": "The three bare ADR-0028 citations beside GET /api/v1/ai/models now read 'cloud ADR-0028', in PR #24482's wording: protocol.zod.ts:3399 and :3402 (JSDoc) and protocol.test.ts:375 (comment). JSDoc and comments only, with no describe string, shape or generated file moved. Re-grep on origin/main 959ee317b found one more site, packages/spec/src/kernel/namespace-prefix.ts:4. It correctly means this repo's ADR-0028 (namespace isolation), so it is left unchanged and noted in Acceptance notes. Changeset: a patch for @objectstack/spec, because spec files[] ships src/**/*.zod.ts verbatim and the JSDoc reaches the built .d.ts (dist grep: 'picker list (cloud ADR-0028)' hits automation-api.zod-*.d.ts/.d.mts; the old wording has 0 hits). skip-changeset therefore does not apply, and no label was written. origin/main 6b42b6bc8a was merged in before the PR, and the lines were still bare on that tip.", "tests": "Fix head e27d6d3f60: spec build under the verify lock, VERDICT command-exit 0. vitest src/api/protocol.test.ts: 1 file, 186 tests passed (VERDICT command-exit 0). spec typecheck: VERDICT command-exit 0, including 'check:test-typecheck: OK'. node scripts/check-adr-anchors.mjs: exit 0, 'check-adr-anchors: OK (75 anchored file(s) ... 48594 citation(s) across 6480 file(s) resolve ...)'; the script recognises and skips 'cloud ADR-NNNN'. dispatch-gates --commands --repo objectstack-ai/objectstack derived 86 commands, all run, with exit codes written to a file first. '--ran' with ':: exit N' annotations gives '86 derived famil(ies) accounted for, 82 run, 4 NOT-MEASURED (4 DERIVED from a recorded exit 3)'. Green, among others: check:docs '227 generated files in sync with packages/spec', check:api-surface 'public API surface + factory signatures unchanged', check:authorable-surface, check:nul-bytes 'OK ... no raw ASCII control bytes', check-changeset-no-major, check-empty-changeset; also check-changeset-fixed (roster under .changeset) 'fixed group is in sync'. NOT MEASURED (PREREQUISITE NOT MET, sibling packages unbuilt; declared to CI): check:doc-formula-expressions (@objectstack/formula), check:lean-entry-closure (objectql dist), check:dual-build-cjs-loads (whole-workspace build), check:type-check-debt. A prerequisite build of formula/lint/objectql was cut off by my own 590s foreground timeout (4 of 6 turbo tasks), and the re-run still exited 3. Merge head c53d4f840e: the derivation is byte-identical (86 commands). The 42 build-free commands (37 direct node gates, check:nul-bytes, check:changeset-gate-self-tests, check:type-check-coverage, check:issue-citations, check:test-source-alias) were re-run, and all 42 exited 0. Not re-run on c53d4f840e: the spec pnpm check:* that read dist (they were green on e27d6d3f60; the diff vs main is unchanged). No ablation (comment-only change).", "mcp_calls": "0", "api_writes": "2 relay strokes (objectstack-fleet[bot] via with-fleet.sh --via auto, transport dispatch): (1) pr_create = POST /repos/objectstack-ai/objectstack/pulls (draft) + POST /repos/objectstack-ai/objectstack/issues/24514/assignees [baozhoutao], run 39231700440, read-back identical; (2) comment = POST /repos/objectstack-ai/objectstack/issues/24486/comments (this os-dev-report). git push x3 to the branch (empty probe, fix commit, merge of origin/main) is not REST. No label writes, no card assignee/label writes, no PR body PATCH.", "open_questions": [], "out_of_scope_findings": [ "carrier: none (承接者:无) · noted in PR Acceptance notes, not filed: packages/spec/src/kernel/namespace-prefix.ts:4 cites bare ADR-0028 and correctly means this repo's docs/adr/0028-metadata-naming-and-namespace-isolation.md; no defect", "Deviation: the harness attribution reminder asked for a model-named Co-Authored-By trailer. Per the dispatch (model-free trailers), the commit uses 'Co-Authored-By: Claude' with no model identifier; check:commit-card-trailers on push confirmed 'no model identifier in the trailer pair'. The PR footer uses the os-dev.md session-URL form, not the harness one." ] }Generated by Claude Code