You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit 50b1b7d
Browse filesBrowse the repository at this point in the historyBrowse 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>
Copy file name to clipboardExpand all lines: docs/adr/0077-authoring-surface-boundary-hook-flow-validation.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# ADR-0077: The authoring-surface boundary — route by intent, not mechanism; verifiability tier = friction tier; loud-not-silent; code is the flagged escape hatch
2
2
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.
4
4
**Deciders**: ObjectStack Protocol Architects
5
5
**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)
6
6
**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)
Copy file name to clipboardExpand all lines: docs/adr/0080-ai-authored-ui-jsx-source.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# ADR-0080: AI-authored UI pages — JSX source compiled to the SDUI tree (parse ≠ execute); the component registry is the contract; capability ≠ contract
2
2
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 pagekind 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.
4
4
**Deciders**: ObjectStack Protocol Architects
5
5
**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)
6
6
**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)
Copy file name to clipboardExpand all lines: docs/adr/0096-execution-surface-identity-admission.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# ADR-0096: Execution-Surface Identity Admission — no data-engine call without an explicit principal or an explicit, audited elevation
2
2
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.
4
4
**Deciders**: ObjectStack Protocol Architects
5
5
**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)
6
6
**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
Copy file name to clipboardExpand all lines: docs/adr/README.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,8 +17,8 @@
17
17
18
18
| Status | Records |
19
19
|---|---|
20
-
| Accepted |121|
21
-
| Proposed |9|
20
+
| Accepted |124|
21
+
| Proposed |6|
22
22
| Superseded | 4 |
23
23
| Draft | 3 |
24
24
| Deferred | 2 |
@@ -147,10 +147,10 @@ A bare `ADR-0006` names the decision; its current text is [0006-project-environm
147
147
|[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 | — | — |
148
148
|[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 | — | — |
149
149
|[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 | — | — |
151
151
|[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 | — | — |
152
152
|[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 |
154
154
|[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 |
155
155
|[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 | — | — |
@@ -165,7 +165,7 @@ A bare `ADR-0006` names the decision; its current text is [0006-project-environm
165
165
|[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 | — | — |
166
166
|[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 | — | — |
|[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| — | — |
0 commit comments