Skip to content

Commit f2fdac5

Browse files
docs(adr): ADR batch 3 of the stale Proposed records — 0063, 0064, 0071 Accepted, 0072 and 0073 Accepted (narrowed); batch 2 contract-review corrections (0038 L5, 0046 §5, 0052 P0b) (#27081)
Part of #26553 (the carrier for the four ADR ruling batches under #26076 ruling A) Clause-②: no Metadata-protocol: none Ruling-ref: #26553 (comment) Ruling-ref: #26553 (comment) (batch 2, corrections) Contract review tier: **H** — status lines and one body paragraph in `docs/adr/**` plus the regenerated `docs/adr/README.md`, a governed surface; it lands by the maintainer's approval (AGENTS.md Prime Directive 14), never by a seat's click. ## 维护者速读 - **改了什么:** 两件事,各一个提交。 1. **#27034 合约复核的修正**(`e75c243a3d`):ADR-0038 状态行把 L5 从「已实现」改成「harness 已建但未上弦——夜间排程自 2026-08-04 关闭、无评测环境(cloud#1119);待办加 L5 上弦」;ADR-0046 状态行「§5 标签」改为「§5 标签发现,`DocSchema.tags` 今天只作 book include 操作数」;ADR-0052 §6 P0b 段落把 `sys_notification` 从「deferred」翻成 ✅(`service-messaging` 注册,plugin-audit 只注册账本/动态/评论/反应四个对象)。裁决字母不变。 2. **ADR 第 3 批的五行状态**(`a7fa8a05b8`,按你对 #26553 的裁决 6460071100,「同意」):ADR-0063 → Accepted;ADR-0064 → Accepted;ADR-0071 → Accepted;ADR-0072 → Accepted 收窄(Slice 0–2 已实现,Slice 3–5 与 D6 待办);ADR-0073 → Accepted 收窄(v1 决策记录 + D5 护栏 + 两次修订已实现,M2 automation 主体待第一个真实消费者)。 `docs/adr/README.md` 由 `scripts/adr-index.mjs` 重新生成(Accepted 116 → 121,Proposed 14 → 9)。 - **为什么:** #26076 裁决 A:19 份旧 Proposed 由你逐批裁;这是第 3 批的落地,加上第 2 批复核指出的措辞修正(当时 #27034 已进合并队列推不上去)。 - **风险与回滚:** 只有文字;回滚 = revert。 - **你要做的:** 批准(Tier H)。本席账号在 `GOVERNED_APPROVERS`,不投审核。 ## 席位核对 Director seat, `session_01KrKXQVvgYk2AJ4VkqMobyb` (ledger objectstack#12708). Each line keeps the keyword as the first word after `**Status**: ` (the spelling `scripts/adr-index.mjs` reads) in the batch 1/2 form (`Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed …)`), re-verified on `origin/main` `3230bdbf76` / `cd609a4979` and cloud `ce2ed26`. The batch 2 corrections answer contract review 6459576746 on #27034 (must-fix L5; should-fix §5 wording; should-fix P0b paragraph). Gates run on this tree: `node scripts/adr-index.mjs --check` and `--self-test` green; `check-adr-anchors`, `check-adr-links`, `check-adr-symbol-anchors` exit 0. No changeset (docs only, `skip-changeset`). Batch 4 (ADR-0077 · 0080 · 0096 · 0025, the last) is presented at the maintainer's next summon. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01KrKXQVvgYk2AJ4VkqMobyb --------- Co-authored-by: Claude <noreply@anthropic.com>
1 parent a26776d commit f2fdac5

9 files changed

Lines changed: 20 additions & 21 deletions

‎docs/adr/0038-build-verification-loop.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> **🔶 Cloud-owned — superseded in part by cloud ADR-0025 (2026-06-25).** The in-UI AI runtime and the `ask` / `build` agents described here moved to the **cloud / Enterprise** distribution (`@objectstack/service-ai` → `cloud/packages/service-ai`, closed); the open framework exposes AI only via `@objectstack/mcp` (BYO-AI) and ships no in-product `ask` / `build` chat. Retained as historical design context, now **cloud-owned** — see [`cloud/docs/adr/0025-service-ai-to-cloud-open-mcp-only`](https://github.com/objectstack-ai/cloud/blob/main/docs/adr/0025-service-ai-to-cloud-open-mcp-only.md).
44
5-
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2026-06-11). cloud-owned; implemented: L1 graph lint and L4 `verify_build` self-correction in cloud `service-ai-studio` (`verify/graph-lint.ts`), L3 runtime probes in the framework (`metadata-protocol/src/build-probes.ts`, `RuntimeBuildIssue` contract, post-publish probe report in `protocol.zod.ts`), L5 golden-prompt evals (cloud `eval-golden-prompts.yml` on `ai_eval_cases` / `ai_eval_runs`); pending: L2 renderability contract (dataset compile only today).
5+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2026-06-11). cloud-owned; implemented: L1 graph lint and L4 `verify_build` self-correction in cloud `service-ai-studio` (`verify/graph-lint.ts`), L3 runtime probes in the framework (`metadata-protocol/src/build-probes.ts`, `RuntimeBuildIssue` contract, post-publish probe report in `protocol.zod.ts`), L5 golden-prompt harness built (cloud `eval-golden-prompts.yml`, `scripts/eval/golden-prompts.mjs` on `ai_eval_cases` / `ai_eval_runs`) but unarmed — nightly schedule off since 2026-08-04 and no eval environment (cloud#1119); pending: L2 renderability contract (dataset compile only today), L5 arming.
66
**Deciders**: ObjectStack Protocol Architects
77
**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (drafts as the staging layer — this ADR **replaces its human-approval assumption for AI builds** with a machine gate; HITL stays for destructive actions), [ADR-0021](./0021-analytics-dataset-semantic-layer.md) (datasets — what most verification probes exercise), ADR-0037 / [framework#1694](https://github.com/objectstack-ai/objectstack/pull/1694) (Live Canvas — the *human-visibility* complement to this ADR's *machine-verification*)
88
**Consumers**: `@objectstack/service-analytics` + `@objectstack/objectql` (verification probes), `../cloud/service-ai-studio` (graph lint, `verify_build` tool, self-correction protocol, eval intelligence), `../objectui` (build health card in chat), `ai_eval_cases`/`ai_eval_runs` (existing, currently-unused storage)

‎docs/adr/0046-package-docs-as-metadata.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0046: Package documentation as metadata — flat `src/docs/*.md` compiled into the manifest
22

3-
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2026-06-12, revised — simplified from the original directory/docSet design). implemented: P1 (`DocSchema`, `os build` collection of flat `src/docs/*.md`, publish lint, kernel `doc`), P2 (console documentation portal and help menu, Studio doc editor), P3a/P3b (`book` spine, `GET /meta/book/:name/tree`, §6.7 audience gating in the REST read gate); pending: P3c (Studio drag-edit of `doc.order` / groups, anonymous library via `apps/docs`) and P3d (portal taxonomy, book-level search, §5 tags).
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2026-06-12, revised — simplified from the original directory/docSet design). implemented: P1 (`DocSchema`, `os build` collection of flat `src/docs/*.md`, publish lint, kernel `doc`), P2 (console documentation portal and help menu, Studio doc editor), P3a/P3b (`book` spine, `GET /meta/book/:name/tree`, §6.7 audience gating in the REST read gate); pending: P3c (Studio drag-edit of `doc.order` / groups, anonymous library via `apps/docs`) and P3d (portal taxonomy, book-level search, §5 tag-based discovery — `DocSchema.tags` exists today only as the book-include operand).
44
· **Superseded in part (2026-06-13, ADR-0048)** — the bare-name overwrite premise; note at §3.2.
55
**Deciders**: ObjectStack Protocol Architects
66
**Builds on**: [ADR-0003](./0003-package-as-first-class-citizen.md) (package + versioned releases), [ADR-0016](./0016-studio-package-authoring-and-publish.md) (publish pipeline, `manifest_json` snapshot), [ADR-0025](./0025-plugin-package-distribution.md) (artifact distribution, trust boundary), [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (AI as primary author)

‎docs/adr/0052-audit-is-not-the-activity-feed.md‎

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -323,13 +323,12 @@ rather than written twice.
323323
ships P0a.**
324324
- **P0b — ownership, no behavior change.** ✅ `sys_attachment` registration moved
325325
`plugin-audit` → `service-storage` (both always-on, so it stays available; the
326-
definition stays in `platform-objects`). `sys_notification` is **deferred** —
327-
originally because it was mid-migration to an event model (ADR-0030) and moving it
328-
would have collided with that in-flight work. That migration is **retired**
329-
(#16194) and the file this line used to name
330-
(`metadata/.../migrate-sys-notification-to-event.ts`) is deleted, so the collision
331-
reason no longer holds; ⚠️ whether the move now proceeds is a call for this
332-
record's owner, not a consequence of the retirement. Still TODO:
326+
definition stays in `platform-objects`). ✅ `sys_notification` registration moved
327+
`plugin-audit` → `service-messaging` (`messaging-service-plugin.ts` registers
328+
`SysNotification`; `audit-plugin.ts` registers only `sys_audit_log`, `sys_activity`,
329+
`sys_comment`, `sys_comment_reaction`). It had been deferred while a migration to an
330+
event model (ADR-0030) was in flight; that migration was retired (#16194) and the
331+
move then went ahead. Still TODO:
333332
make "collaboration/activity is a platform primitive" an explicit capability
334333
rather than an audit side-effect; keep it default-available so no UI regresses.
335334
- **P1 — kill the split-brain + milestone templates (§5b.2).** Choose the

‎docs/adr/0063-two-kernel-agents-skills-are-the-extension-primitive.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> **🔶 Cloud-owned — superseded in part by cloud ADR-0025 (2026-06-25).** The in-UI AI runtime and the `ask` / `build` agents described here moved to the **cloud / Enterprise** distribution (`@objectstack/service-ai` → `cloud/packages/service-ai`, closed); the open framework exposes AI only via `@objectstack/mcp` (BYO-AI) and ships no in-product `ask` / `build` chat. Retained as historical design context, now **cloud-owned** — see [`cloud/docs/adr/0025-service-ai-to-cloud-open-mcp-only`](https://github.com/objectstack-ai/cloud/blob/main/docs/adr/0025-service-ai-to-cloud-open-mcp-only.md).
44
5-
**Status**: Proposed (2026-06-22) — cloud-owned (2026-07-16 audit): the framework spec dependencies shipped (`skill.surface` + `agent.surface` enums, `spec/ai/{skill,agent}.zod.ts`); the runtime two-agent split, shim removal, ask-rename and tenant-agent withdrawal live in cloud `service-ai` / objectui and are not verifiable in this repo.
5+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed 2026-06-22). cloud-owned; implemented: framework `skill.surface` (`ask` | `build` | `both`, `packages/spec/src/ai/skill.zod.ts`) and the `agent` metadata type closed to runtime creation (`metadata-plugin.zod.ts`, tenant agents withdrawn); cloud `service-ai` resolves `ask` as canonical with `data_chat` and `metadata_assistant → build` as aliases (`agents/agent-aliases.ts`), the runtime catalog lists platform-owned agents only (`agent-runtime.ts`, §2), a build-shaped request on the `ask` surface is declined and redirected to the Builder (§1), and objectui binds the agent to the surface. Nothing pending.
66
**Deciders**: ObjectStack Protocol Architects
77
**Supersedes**: [ADR-0040](./0040-unified-assistant-and-agent-binding.md) — its core decision (a *single* unified assistant selected by *per-turn intent classification*) is **reversed**. ADR-0040's UX win ("the end user never picks from a roster") is **kept** but re-grounded: the *surface* binds the agent, not a classifier and not a dropdown. §3 (custom tenant agents) is withdrawn; §4 (tool-scoping) is handed to [ADR-0064](./0064-tool-scoping-to-agent.md).
88
**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (draft → verify → publish), [ADR-0038](./0038-build-verification-loop.md) (verify-fix-reverify discipline carried by skills)

‎docs/adr/0064-tool-scoping-to-agent.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
> **🔶 Cloud-owned — superseded in part by cloud ADR-0025 (2026-06-25).** The in-UI AI runtime and the `ask` / `build` agents described here moved to the **cloud / Enterprise** distribution (`@objectstack/service-ai` → `cloud/packages/service-ai`, closed); the open framework exposes AI only via `@objectstack/mcp` (BYO-AI) and ships no in-product `ask` / `build` chat. Retained as historical design context, now **cloud-owned** — see [`cloud/docs/adr/0025-service-ai-to-cloud-open-mcp-only`](https://github.com/objectstack-ai/cloud/blob/main/docs/adr/0025-service-ai-to-cloud-open-mcp-only.md).
44
5-
**Status**: Proposed (2026-06-22) — cloud-owned (2026-07-16 audit): the only framework dependency (`skill.surface`) exists; the tool-resolution scoping, global fall-through removal, and bind-time affinity error live in cloud `service-ai` and are not verifiable in this repo.
5+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed 2026-06-22). cloud-owned; implemented in cloud `service-ai` `agent-runtime.ts`: an agent's tools are the union of its surface-compatible skills' tools with the global fall-through removed (§1), the registry stays global with `schema_reader` as the `surface:'both'` read-only skill (§2), an incompatible skill ↔ agent affinity is a load error (§3), no new schema (§4). Nothing pending.
66
**Deciders**: ObjectStack Protocol Architects
77
**Builds on**: [ADR-0063](./0063-two-kernel-agents-skills-are-the-extension-primitive.md) (two agents bound by surface; skill ↔ agent affinity), [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (draft-gated authoring tools)
88
**Resolves**: [ADR-0040 §4](./0040-unified-assistant-and-agent-binding.md) ("tools are registry-global; a custom agent can change persona but not constrain capability") — the named follow-up contract.

‎docs/adr/0071-dataset-semantic-layer-depth.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0071: Dataset semantic-layer depth — multi-hop joins
22

3-
**Status**: Proposed. (Refocused — see **Correction** below. The first merged draft also proposed matrix/across pivoting; a code check found that already implemented, so this ADR now covers only the remaining gap: multi-hop joins.) **Multi-hop to-one joins (≤3 hops / 4 objects) have since been implemented & are live — header pending formal update.**
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed 2026-06-24, refocused — see **Correction** below; the first merged draft also proposed matrix/across pivoting, which a code check found already implemented, so this record covers only multi-hop joins). implemented: P1 multi-hop to-one joins behind the 3-hop cap (`packages/spec/src/ui/dataset.zod.ts` `include` path validation, `service-analytics` `dataset-compiler.ts` and the ObjectQL / native-SQL strategies) and P2 the Studio include-path editor (`DatasetDefaultInspector.tsx`, `useDatasetFields.ts`). Nothing pending.
44

55
## Correction (2026-06-24)
66

‎docs/adr/0072-reference-scope-and-resolvability.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0072: Reference Scope & Resolvability — the authored-expression data-picker model (#1934)
22

3-
**Status**: Proposed (2026-06-25)
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed 2026-06-25). implemented: Slice 0/1 (flow scope resolution, the `{x}` picker, scope-aware unknown-reference validation inline and in the Problems panel — objectui `FlowReferenceField.tsx`, `flow-node-refs.ts`, `flow-expr-problems.ts`) and Slice 2 object-output drilling (`resolveObjectName` from the producing node's `config.objectName`); pending: Slice 3 lazy reference tree, Slice 4 guided fetch (D4), Slice 5 the D2 resolver on formula / validation / visibility / sharing surfaces, and D6 `outputSchema.objectName`; the Open questions stand.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0032](./0032-unified-expression-layer.md) (one authoring language: CEL), [ADR-0058](./0058-expression-and-predicate-surface.md) (the expression & predicate surface — interpret vs compile, fail-policy matrix), [ADR-0036 field conditional rules](https://github.com/objectstack-ai/objectui/blob/main/docs/adr/0036-field-conditional-rules.md) (objectui repo)
66
**Consumers**: `@objectstack/spec` (`FlowNode.outputSchema`), `@objectstack/service-automation`, `@objectstack/formula`; `@object-ui/app-shell` (the metadata-admin authoring surface — implementation lives in the objectui repo)

‎docs/adr/0073-automation-execution-identity.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0073: Automation execution identity — a built-in non-human principal for user-less runs, `runAs` as authorization posture, attribution always concrete
22

3-
**Status**: Proposed (2026-06-25)
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed 2026-06-25). implemented as the record scopes v1: the decision record (D1–D4), the D5 author-time guardrail (`packages/lint` `flow-runas-unscoped` on every user-less trigger), and the two amendments above (#3760: a user-less `runAs:'user'` data operation is refused, `UnscopedRunDataAccessError`; #25251: a `runAs:'system'` run writes no identity assignment); pending: M2 — the per-environment `automation` principal and `runAs:'automation'` (`execution.zod.ts` still `['system','user']`), gated on the first real consumer, not a date.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0002](./0002-environment-database-isolation.md) (**environment-per-database** isolation; Control-Plane / Data-Plane split), [ADR-0004](./0004-cloud-multi-kernel.md) (`ObjectKernel` per environment), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-mark gate; stage by whether the feature exists), [ADR-0057](./0057-erp-authorization-core-business-units-and-scope-depth.md) (`sys_role` is platform-native; `ExecutionContext.roles`; scheduled/lifecycle jobs), [ADR-0066](./0066-unified-authorization-model.md) (capability / assignment / requirement separation — resources declare a capability, never "who"), [ADR-0068](./0068-unified-user-context-and-built-in-identity-roles.md) (`EvalUser` / `current_user`; **identities are roles, not booleans**)
66
**Consumers**: `@objectstack/spec` (the identity contract + `runAs` semantics), `@objectstack/cli` (author-time validation), `@objectstack/plugin-security` (`resolve-execution-context`, RLS, seeded roles — M2), `@objectstack/service-automation` (the engine's `runAs` resolution — M2), `@objectstack/trigger-schedule` + `@objectstack/trigger-api` (user-less trigger surfaces), `@objectstack/plugin-reports` (the report scheduler — today hand-rolls `SYSTEM_CTX`), `@objectstack/runtime` (audit actor), and the ADR-0057 lifecycle/retention jobs.

0 commit comments

Comments
 (0)