Skip to content

Commit 50b1b7d

Browse files
docs(adr): ADR batch 4 of the stale Proposed records — 0077, 0080, 0096 Accepted (narrowed to what landed); 0025 held (#27105)
Part of #26553 (the carrier for the four ADR ruling batches under #26076 ruling A) Clause-②: no Metadata-protocol: none Ruling-ref: #26553 (comment) Contract review tier: **H** — three status lines 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. ## 维护者速读 - **改了什么:** 按你对 ADR 第 4 批的裁决(#26553,评论 6461799232,「除了插件分发这个,其他同意」)改三行状态:ADR-0077 → Accepted 收窄(意图→面路由模型成立;v1 的两条 `os build` lint 与 §3 人审标记待办);ADR-0080 → Accepted 收窄(`sdui-parser`、页面种类经 ADR-0081 改名 `html`、保存门编译与 `requires` 派生已实现;注册表校验深度待办);ADR-0096 → Accepted 收窄(D1/D5 拒绝无主体调用与 D4 准入矩阵已实现;D2 提权门、D3 签名、D6 动作级 `runAs` 待办)。**ADR-0025 按你的话留待综合评估,本 PR 不动它。** `docs/adr/README.md` 由 `scripts/adr-index.mjs` 重新生成(Accepted 121 → 124,Proposed 9 → 6)。 - **为什么:** #26076 裁决 A:19 份旧 Proposed 由你逐批裁;这是第 4 批(最后一批)的落地。四批之后,2026-07-26 前的 Proposed 只剩 ADR-0025(待你评估)与 ADR-0050(#27032 待你裁)。 - **风险与回滚:** 只有文字;回滚 = 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–3 form (`Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed …)`), re-verified on `origin/main` `cd609a4979` / `f2fdac5d7a`. 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`). 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01KrKXQVvgYk2AJ4VkqMobyb Co-authored-by: Claude <noreply@anthropic.com>
1 parent 84e1370 commit 50b1b7d

4 files changed

Lines changed: 8 additions & 8 deletions

‎docs/adr/0077-authoring-surface-boundary-hook-flow-validation.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0077: The authoring-surface boundary — route by intent, not mechanism; verifiability tier = friction tier; loud-not-silent; code is the flagged escape hatch
22

3-
**Status**: Proposed (2026-06-28)
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed 2026-06-28). the intent → surface routing model (§1–§2) and the `record-before` non-goal (§5) stand and are the rule the build agent and `packages/spec/src/data/object.zod.ts` follow; pending: v1's two `os build` lints (`flow-record-before-cannot-mutate`, `flow-record-before-cannot-veto`, not yet in `packages/lint/src/lint-flow-patterns.ts`) and the §3 hook-body requires-human-review flag.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0010](./0010-nl-to-flow-authoring.md) (NL→flow; flow is the AI-authored IR), [ADR-0018](./0018-unified-node-action-registry.md) (one open node/action registry), [ADR-0019](./0019-approval-as-flow-node.md) (collapse approval into flow — one engine, durable-pause node), [ADR-0031](./0031-advanced-flow-node-executors-and-dag.md) (structured control-flow, well-formed-by-construction), [ADR-0032](./0032-unified-expression-layer.md) (validate-by-default, **no silent failure**), [ADR-0034](./0034-transactional-writes-and-ambient-transaction.md) (ambient transaction; the ALS boundary), [ADR-0038](./0038-build-verification-loop.md) (the agent builds → verifies → self-corrects), [ADR-0041](./0041-flow-trigger-family.md) (flow trigger family), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove gate), [ADR-0054](./0054-runtime-proof-for-authorable-surface.md) (prove-it-runs gate), [ADR-0058](./0058-expression-and-predicate-surface.md) (one expression language, two backends), [ADR-0073](./0073-automation-execution-identity.md) (`runAs` is authorization posture)
66
**Consumers**: `@objectstack/spec` (`HookSchema`, `FlowSchema`, validation-rule schema — the intent metadata each surface carries), `@objectstack/cli` (`os build` lints — the new loud-not-silent guardrails), `@objectstack/objectql` (hook binder / wrappers), `@objectstack/service-automation` (flow engine + `trigger-record-change`), the `objectstack-automation` and `objectstack-data` skills (the routing decision tree the build agent follows)

‎docs/adr/0080-ai-authored-ui-jsx-source.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0080: AI-authored UI pages — JSX source compiled to the SDUI tree (parse ≠ execute); the component registry is the contract; capability ≠ contract
22

3-
**Status**: Proposed (2026-06-29) — partially implemented (2026-07-16 audit): `sdui-parser` package (parse≠execute) + codegen + `tier:'public'` flag + page-kind schema + parse-level lint shipped; the save-time authoritative compile→store(`compiledTree`) pipeline and registry-manifest prop/binding validation are NOT wired (the parser is consumed only by `@objectstack/lint`).
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed 2026-06-29). implemented: `@objectstack/sdui-parser` (parse ≠ execute, codegen, the curated public tier) consumed by `metadata-protocol`, `lint` and objectui; the page kind was renamed `jsx → html` by ADR-0081 (which builds on this record) and the `jsx` value retired at 18 (#23543); the save door compiles `html` source and derives `requires` (`page.zod.ts` `COMPILED_PAGE_KINDS`, §5); amendment of 2026-09-01 below; pending: registry-manifest prop/binding validation depth (Tier A `inputs`) and the binding-against-object-schema check; the §4 deferred list stays.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (AI writes metadata via draft-gated `saveMetaItem`), [ADR-0038](./0038-build-verification-loop.md) (agent builds → verifies → self-corrects), [ADR-0046](./0046-package-docs-as-metadata.md) (generated, not hand-maintained, surfaces), [ADR-0048](./0048-cross-package-metadata-collision.md) (package id is the addressing unit; `requires`), [ADR-0058](./0058-expression-and-predicate-surface.md) (one expression language, two backends), [ADR-0063](./0063-two-kernel-agents-skills-are-the-extension-primitive.md) (build agent owns metadata authoring), [ADR-0064](./0064-tool-scoping-to-agent.md) (tool scope by surface), [ADR-0065](./0065-sdui-styling-model.md) (scoped styles — the conflict-free styling channel), [ADR-0067](./0067-commit-history-and-rollback-for-ai-authoring.md) (versioned AI-authored metadata), [ADR-0077](./0077-authoring-surface-boundary-hook-flow-validation.md) (route by intent; verifiability tier = friction tier; loud-not-silent; code is the flagged escape hatch), [ADR-0078](./0078-no-silently-inert-metadata.md) (the completeness gate — valid-but-inert fails loudly)
66
**Consumers**: `@objectstack/spec` (`packages/spec/src/ui/page.zod.ts` — gains a JSX-source page kind + the tree *envelope*; **does not** gain per-component prop schemas), `@objectstack/cli` (`os build` / `os validate` — the save-time parse + validate gate), a **new shared `@objectstack/sdui-parser`** (isomorphic JSX-text → SchemaNode-tree compiler, run server-side authoritative and client-side for preview), `../objectui` `@object-ui/core` (the `ComponentRegistry` `inputs` become the authoritative contract; `getAllConfigs()` is serialized to a manifest) and `@object-ui/react` (`SchemaRenderer` renders the compiled tree, unchanged), the `objectstack-ui` skill (the routing + the curated public block list the build agent composes from)

‎docs/adr/0096-execution-surface-identity-admission.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ADR-0096: Execution-Surface Identity Admission — no data-engine call without an explicit principal or an explicit, audited elevation
22

3-
**Status**: Proposed (2026-07-15)
3+
**Status**: Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed 2026-07-15). implemented: D1 and D5's fail-closed posture (a principal-less data-engine call is refused, `packages/runtime/src/http-dispatcher.ts`), the D4 execution-surface admission matrix (`packages/qa/dogfood/test/authz-conformance.matrix.ts`), the E2 exploitables fixed on their own cards; pending: D2 `systemContext(reason)` / `SystemGrant` as the one elevation door, D3 identity-required engine signatures, D6 action-level `runAs` in ADR-0073's vocabulary.
44
**Deciders**: ObjectStack Protocol Architects
55
**Builds on**: [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove gate; stage by whether the feature exists), [ADR-0056](./0056-permission-model-landing-verification.md) D10 (authz conformance matrix — the durable-encoding idiom this ADR extends), [ADR-0066](./0066-unified-authorization-model.md) (capability gate; action `requiredPermissions`), [ADR-0073](./0073-automation-execution-identity.md) (`runAs` as authorization **posture** — `user` / `automation` / `system`; no anonymous run; M2 gated on the first real consumer), [ADR-0088](./0088-metadata-kind-admission-and-retirement.md) (the admission-test idiom, at the kind level), [ADR-0090](./0090-permission-model-v2-concept-convergence.md) D10 (agent ceiling∩user intersection), [ADR-0095](./0095-authz-kernel-tenant-layer-and-posture-ladder.md) (layered authz kernel)
66
**Consumers**: `@objectstack/objectql` (engine call contract), `@objectstack/runtime` (action/facade dispatch, MCP bridge), `@objectstack/plugin-security` (the empty-principal seam), `@objectstack/service-automation`, trigger packages, `@objectstack/dogfood` (conformance matrix + meta-test), every future package that adds an execution surface

‎docs/adr/README.md‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717

1818
| Status | Records |
1919
|---|---|
20-
| Accepted | 121 |
21-
| Proposed | 9 |
20+
| Accepted | 124 |
21+
| Proposed | 6 |
2222
| Superseded | 4 |
2323
| Draft | 3 |
2424
| Deferred | 2 |
@@ -147,10 +147,10 @@ A bare `ADR-0006` names the decision; its current text is [0006-project-environm
147147
| [ADR-0073](./0073-automation-execution-identity.md) | Automation execution identity — a built-in non-human principal for user-less runs, `runAs` as authorization p… | Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 3; proposed 2… | 2026-10-28 | — | — |
148148
| [ADR-0074](./0074-canonical-audit-timestamp-storage-on-sqlite.md) | Audit timestamps are stored in one canonical, timezone-explicit format on SQLite | Accepted — 2026-06-26. Read side extended (2026-09-07): the read repair th… | 2026-06-26 | — | — |
149149
| [ADR-0076](./0076-objectql-core-tiering.md) | objectql is the data engine — relocate metadata management (protocol) out of it; enforce the boundary; defer… | Accepted — D1/D2/D4/D5/D6/D8/D9 implemented; D10/D12 partially landed; D11… | 2026-08-15 | — | — |
150-
| [ADR-0077](./0077-authoring-surface-boundary-hook-flow-validation.md) | The authoring-surface boundary — route by intent, not mechanism; verifiability tier = friction tier; loud-not… | Proposed — 2026-06-28 | 2026-06-28 | — | — |
150+
| [ADR-0077](./0077-authoring-surface-boundary-hook-flow-validation.md) | The authoring-surface boundary — route by intent, not mechanism; verifiability tier = friction tier; loud-not… | Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed 2… | 2026-10-28 | — | — |
151151
| [ADR-0078](./0078-no-silently-inert-metadata.md) | A Zod-valid metadata instance that is functionally incomplete must fail loudly at author time, uniformly acro… | Accepted — framework implemented; the cloud half of §2/§3 pending (cloud)… | 2026-06-28 | — | — |
152152
| [ADR-0079](./0079-record-display-name.md) | The record display-name contract — `nameField` is the one canonical primary-title pointer | Accepted — implemented. This file is a RETROACTIVE RECONSTRUCTION written… | 2026-06-28 | — | — |
153-
| [ADR-0080](./0080-ai-authored-ui-jsx-source.md) | AI-authored UI pages — JSX source compiled to the SDUI tree (parse ≠ execute); the component registry is the… | Proposed — 2026-06-29 — partially implemented (2026-07-16 audit): `sdui-pa… | 2026-06-29 | — | ADR-0065 |
153+
| [ADR-0080](./0080-ai-authored-ui-jsx-source.md) | AI-authored UI pages — JSX source compiled to the SDUI tree (parse ≠ execute); the component registry is the… | Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed 2… | 2026-10-28 | — | ADR-0065 |
154154
| [ADR-0081](./0081-trusted-react-page-tier.md) | A trusted `kind:'react'` page tier — real React executed in the main tree, gated by a host capability; and re… | Accepted — 2026-06-30 — framework scope implemented (`html`/`react` page k… | 2026-06-30 | — | ADR-0065 |
155155
| [ADR-0082](./0082-react-component-contract-governance.md) | Governing the react-tier component contract — spec is the protocol source of truth, the registry is a designe… | Accepted — 2026-06-30 | 2026-06-30 | — | — |
156156
| [ADR-0084](./0084-application-builder-information-architecture.md) | Application-builder information architecture — four content pillars + Settings/Advanced | Accepted — 2026-07-01 | 2026-07-01 | — | — |
@@ -165,7 +165,7 @@ A bare `ADR-0006` names the decision; its current text is [0006-project-environm
165165
| [ADR-0093](./0093-tenancy-mode-and-membership-lifecycle.md) | Tenancy mode as a first-class capability, and a single owner for the user→membership lifecycle | Accepted — 2026-07-13 — implemented: `tenancy` kernel service (`plugin-aut… | 2026-07-13 | — | — |
166166
| [ADR-0094](./0094-sys-permission-set-pure-projection.md) | Permission-Set Definitions Have One Authoritative Store — `syspermissionset` Becomes a Pure Projection | Accepted — 2026-07-14; D5 retired 2026-08-09 (see D5-R) · Amended (2026-10… | 2026-07-14 | — | — |
167167
| [ADR-0095](./0095-authz-kernel-tenant-layer-and-posture-ladder.md) | Authorization Kernel Chain — Tenant Isolation as Layer 0, a Monotonic Posture Ladder, Capability-Derived Post… | Accepted — 2026-07-14 — implemented: D1 tenant Layer 0 (`plugin-security/s… | 2026-07-14 | — | — |
168-
| [ADR-0096](./0096-execution-surface-identity-admission.md) | Execution-Surface Identity Admission — no data-engine call without an explicit principal or an explicit, audi… | Proposed — 2026-07-15 | 2026-07-15 | — | — |
168+
| [ADR-0096](./0096-execution-surface-identity-admission.md) | Execution-Surface Identity Admission — no data-engine call without an explicit principal or an explicit, audi… | Accepted — 2026-10-28 (ruled on objectstack#26553, ADR batch 4; proposed 2… | 2026-10-28 | — | — |
169169
| [ADR-0097](./0097-declarative-connector-instances.md) | Declarative Connector Instances — Provider-Bound `connectors:` Entries Materialized by Generic Executors | Accepted — 2026-07-15 — implemented in framework#2977 | 2026-07-15 | — | — |
170170
| [ADR-0098](./0098-pinyin-search-companion-column.md) | Pinyin Search via a Locale-Gated Companion Column | Accepted | 2026-07-16 | — | — |
171171
| [ADR-0099](./0099-posture-adjudicated-tiering-and-external-rung.md) | Posture-Adjudicated Tiering — one axis for tier decisions, the EXTERNAL rung's enforcement path, no explicit… | Accepted — 2026-07-18; proposed 2026-07-17 — P0 equivalence gate landed wi… | 2026-07-18 | — | — |

0 commit comments

Comments
 (0)