diff --git a/docs/adr/0038-build-verification-loop.md b/docs/adr/0038-build-verification-loop.md index e2121e5ef6f..acafecb025e 100644 --- a/docs/adr/0038-build-verification-loop.md +++ b/docs/adr/0038-build-verification-loop.md @@ -2,7 +2,7 @@ > **πŸ”Ά 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). -**Status**: Proposed (2026-06-11) β€” cloud-owned; framework slice partially implemented (2026-07-16 audit): L3 runtime probes shipped and tested (`metadata-protocol/src/build-probes.ts`, `RuntimeBuildIssue` contract); L2 half-present (dataset compile only); L1/L4/L5 + `ai_eval_*` storage are cloud-only and not verifiable in this repo. +**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). **Deciders**: ObjectStack Protocol Architects **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*) **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) diff --git a/docs/adr/0046-package-docs-as-metadata.md b/docs/adr/0046-package-docs-as-metadata.md index d648327ae5a..8c09814e8a3 100644 --- a/docs/adr/0046-package-docs-as-metadata.md +++ b/docs/adr/0046-package-docs-as-metadata.md @@ -1,6 +1,6 @@ # ADR-0046: Package documentation as metadata β€” flat `src/docs/*.md` compiled into the manifest -**Status**: Proposed (2026-06-12, revised β€” simplified from the original directory/docSet design) +**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). Β· **Superseded in part (2026-06-13, ADR-0048)** β€” the bare-name overwrite premise; note at Β§3.2. **Deciders**: ObjectStack Protocol Architects **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) diff --git a/docs/adr/0051-inline-metadata-views-in-docs.md b/docs/adr/0051-inline-metadata-views-in-docs.md index 3387d03a1a9..307f56be204 100644 --- a/docs/adr/0051-inline-metadata-views-in-docs.md +++ b/docs/adr/0051-inline-metadata-views-in-docs.md @@ -1,6 +1,6 @@ # ADR-0051: Inline metadata views in docs β€” the ` ```metadata ` fenced block -**Status**: Proposed (2026-06-16) β€” P1 authoring surface implemented (2026-07-16 audit): `ElementMetadataViewerPropsSchema` + `element:metadata_viewer` component entry + publish lint with reference-liveness checks (`cli/utils/collect-docs.ts lintMetadataEmbeds`); the console SDUI fence-lift and the state_machine/flow/permission renderers are NOT implemented β€” no runtime rendering of the embed yet. +**Status**: Accepted β€” 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2026-06-16). P1–P3 implemented: the `metadata` fenced block lifts to `element:metadata_viewer` in the markdown renderer, the viewer renders `state_machine`, `flow` and `permission` (`ui/packages/components/src/renderers/basic/metadata-viewer.tsx`), publish lint with reference-liveness checks (`cli/utils/collect-docs.ts lintMetadataEmbeds`); `object` embeds and the general `objectui` fence stay deferred (Β§5). **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0046](./0046-package-docs-as-metadata.md) (`doc`/`book` as metadata β€” Β§3.4 syntax boundary, Β§3.5 *derived content is rendered, never written*, Β§6.7 anonymous live-embed guardrail), [ADR-0020](./0020-state-machine-converge-and-enforce.md) (a record state machine is a `state_machine` validation rule on an object, not a standalone type), [ADR-0047](./0047-object-ui-run-modes.md) (ObjectUI is the server-driven UI runtime), [ADR-0048](./0048-cross-package-metadata-collision.md) (package-scoped single-item resolution), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove posture for governed properties), [ADR-0033](./0033-ai-assisted-metadata-authoring.md) (AI as primary author) **Consumers**: `@objectstack/spec` (`DocSchema` unchanged; new `element:metadata_viewer` entry in `ComponentPropsMap`; the fenced-block body schema), `@objectstack/cli` (publish lint: parse + validate body + reference-liveness), `@objectstack/console` (the SDUI doc renderer lifts ` ```metadata ` fences into the component), `apps/docs` portal (anonymous degradation per ADR-0046 Β§6.7), `@objectstack/core` (kernel **unchanged** β€” `doc` stays inert) diff --git a/docs/adr/0052-audit-is-not-the-activity-feed.md b/docs/adr/0052-audit-is-not-the-activity-feed.md index 4b51e261796..a546fb631b3 100644 --- a/docs/adr/0052-audit-is-not-the-activity-feed.md +++ b/docs/adr/0052-audit-is-not-the-activity-feed.md @@ -1,6 +1,6 @@ # ADR-0052: Audit is not the activity feed β€” decompose collaboration, activity, and audit into bounded contexts -**Status**: Proposed (2026-06-16) β€” partially implemented (2026-07-16 audit): Β§5b declarative activity (`trackHistory` + milestone templates), ActivityPointer fields, and `service-feed` retirement are done; the headline bounded-context decomposition is NOT β€” `sys_activity`/`sys_comment` still live in plugin-audit, the audit-writer still dual-writes (no event-bus spine), `sys_notification` move deferred (P1/P2). +**Status**: Accepted β€” 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2026-06-16). implemented: Β§5b declarative activity (`trackHistory` + object-level milestone templates), P0b ownership moves (`sys_attachment` and `sys_notification` are no longer registered by plugin-audit), P1 (`sys_comment` is the one collaboration backend with reactions and threads; `service-feed` retired); pending: P2 domain event spine β€” the audit writer still dual-writes `sys_audit_log` and `sys_activity`, and `sys_activity` / `sys_comment` still live in plugin-audit (the headline bounded-context decomposition). **Deciders**: ObjectStack Protocol Architects **Builds on**: [ADR-0030](./0030-notification-platform-convergence.md) (single-ingress `NotificationService.emit` β€” *no producer writes a per-user inbox row directly*; this ADR applies the same "one canonical service per context, producers emit through a seam" posture to activity and collaboration), [ADR-0012](./0012-notification-platform.md) (messaging outbox owns `sys_notification`), [ADR-0049](./0049-no-unenforced-security-properties.md) (enforce-or-remove posture for governed properties β€” audit immutability must be enforced at its own boundary, not diluted by co-tenant objects), [ADR-0042](./0042-approval-sla-escalation.md) (uses `sys_audit_log` rows as an idempotency primitive β€” a second reason audit must stay a clean, append-only ledger) **Consumers**: `@objectstack/plugin-audit` (sheds 4 of its 5 objects; keeps only `sys_audit_log`), `@objectstack/service-feed` (becomes the canonical collaboration+timeline backend, or is retired into it), `@objectstack/service-storage` (takes `sys_attachment`), `@objectstack/service-messaging` (takes `sys_notification`, per ADR-0030), `@objectstack/platform-objects` (object ownership map), `@objectstack/cli` (`ALWAYS_ON_CAPABILITIES` / capability resolver), `@objectstack/console` (ChatterPanel data source), `@objectstack/spec` (`IFeedService` / event contracts) diff --git a/docs/adr/README.md b/docs/adr/README.md index 345ab7cc6eb..e4065f06f6c 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -17,8 +17,8 @@ | Status | Records | |---|---| -| Accepted | 112 | -| Proposed | 18 | +| Accepted | 116 | +| Proposed | 14 | | Superseded | 4 | | Draft | 3 | | Deferred | 2 | @@ -108,7 +108,7 @@ A bare `ADR-0006` names the decision; its current text is [0006-project-environm | [ADR-0035](./0035-config-driven-master-detail.md) | Config-driven master-detail (declare on the relationship, forms derive) | Accepted | β€” | β€” | β€” | | [ADR-0036](./0036-app-as-rest-api-and-mcp-server.md) | Every app is a REST API + an MCP server β€” make it visible and connectable after build | Accepted β€” framework implemented; cloud surfacing pending (proposed 2026-0… | 2026-06-06 | β€” | β€” | | [ADR-0037](./0037-live-canvas-draft-preview.md) | Live Canvas β€” draft-overlay live preview while you build | Accepted β€” 2026-06-10 β€” all four phases implemented: `previewDrafts` reads… | 2026-06-10 | β€” | β€” | -| [ADR-0038](./0038-build-verification-loop.md) | Build Verification Loop β€” the agent builds, verifies, and corrects itself | Proposed β€” 2026-06-11 β€” cloud-owned; framework slice partially implemented… | 2026-06-11 | β€” | cloud ADR-0025 | +| [ADR-0038](./0038-build-verification-loop.md) | Build Verification Loop β€” the agent builds, verifies, and corrects itself | Accepted β€” 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2… | 2026-10-28 | β€” | cloud ADR-0025 | | [ADR-0039](./0039-token-scope-tree-execution.md) | Concurrent durable pause β€” multi-instance nodes now, token/scope-tree later | Accepted β€” Track A implemented; Track B deferred (proposed 2026-06-11, rev… | 2026-06-11 | β€” | β€” | | [ADR-0040](./0040-unified-assistant-and-agent-binding.md) | Unified Assistant β€” the end user never picks an agent | Superseded β€” by ADR-0063 β€” original: Proposed (2026-06-11) | 2026-06-11 | β€” | ADR-0063, cloud ADR-0025 | | [ADR-0041](./0041-flow-trigger-family.md) | Flow trigger family β€” taxonomy, naming, and the open-source core set | Accepted β€” Tier 1 implemented (rename deprecation stubs pending) (proposed… | 2026-06-12 | β€” | β€” | @@ -116,13 +116,13 @@ A bare `ADR-0006` names the decision; its current text is [0006-project-environm | [ADR-0043](./0043-actionable-approval-links.md) | Actionable approval links β€” single-use tokens with a session-less confirm page | Accepted β€” implemented (proposed 2026-06-12 Β· calibrated 2026-06-12) Β· Ame… | 2026-06-12 | β€” | β€” | | [ADR-0044](./0044-approval-send-back-for-revision.md) | Flow-level send-back-for-revision β€” `revise` branch + typed back-edge re-entry | Accepted β€” engine + model implemented; designer pending (objectui) (propos… | 2026-06-12 | β€” | β€” | | [ADR-0045](./0045-additive-materialization-and-visibility-gate.md) | Additive materialization with a visibility gate β€” drafts narrow to mutations | Accepted β€” 2026-06-12 Β· Amended 2026-08-09 (#4829, maintainer ruling 2026-… | 2026-06-12 | β€” | β€” | -| [ADR-0046](./0046-package-docs-as-metadata.md) | Package documentation as metadata β€” flat `src/docs/.md` compiled into the manifest | Proposed β€” 2026-06-12, revised β€” simplified from the original directory/do… | 2026-06-12 | β€” | β€” | +| [ADR-0046](./0046-package-docs-as-metadata.md) | Package documentation as metadata β€” flat `src/docs/.md` compiled into the manifest | Accepted β€” 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2… | 2026-10-28 | β€” | β€” | | [ADR-0047](./0047-object-ui-run-modes.md) | Two run modes for object UI β€” data views vs interface pages, user filters, and runtime visualization choice | Accepted β€” 2026-06-12; revised 2026-06-19 β€” framework scope implemented (`… | 2026-06-12 | β€” | β€” | | [ADR-0048](./0048-cross-package-metadata-collision.md) | Cross-package metadata collision β€” package-id identity, namespace install gate, package-scoped resolution | Revised β€” 2026-06-13 β€” supersedes the original per-item collision | 2026-06-13 | β€” | β€” | | [ADR-0049](./0049-no-unenforced-security-properties.md) | Spec must not declare security properties the runtime does not enforce (enforce-or-remove gate) | Accepted β€” 2026-06-15 β€” implemented: fail-closed `DESTRUCTIVEOPERATIONS` (… | 2026-06-15 | β€” | β€” | | [ADR-0050](./0050-form-layout-vs-presentation.md) | Form layout vs presentation β€” split the overloaded `FormView.type` | Proposed β€” 2026-06-15 Β· Amended (2026-10-20, letter Bβ€² on #24692, ruling r… | 2026-06-15 | β€” | β€” | -| [ADR-0051](./0051-inline-metadata-views-in-docs.md) | Inline metadata views in docs β€” the ` ```metadata ` fenced block | Proposed β€” 2026-06-16 β€” P1 authoring surface implemented (2026-07-16 audit… | 2026-06-16 | β€” | β€” | -| [ADR-0052](./0052-audit-is-not-the-activity-feed.md) | Audit is not the activity feed β€” decompose collaboration, activity, and audit into bounded contexts | Proposed β€” 2026-06-16 β€” partially implemented (2026-07-16 audit): Β§5b decl… | 2026-06-16 | β€” | β€” | +| [ADR-0051](./0051-inline-metadata-views-in-docs.md) | Inline metadata views in docs β€” the ` ```metadata ` fenced block | Accepted β€” 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2… | 2026-10-28 | β€” | β€” | +| [ADR-0052](./0052-audit-is-not-the-activity-feed.md) | Audit is not the activity feed β€” decompose collaboration, activity, and audit into bounded contexts | Accepted β€” 2026-10-28 (ruled on objectstack#26553, ADR batch 2; proposed 2… | 2026-10-28 | β€” | β€” | | [ADR-0053](./0053-date-and-datetime-semantics.md) | `date` is a timezone-naive calendar day; `datetime` is an instant rendered in a reference timezone | Accepted β€” 2026-06-16 β€” Phase 1 + addendum D-A1 implemented (`sql-driver.t… | 2026-06-16 | β€” | β€” | | [ADR-0054](./0054-runtime-proof-for-authorable-surface.md) | A live authorable property must be proven at runtime, not merely have a consumer (prove-it-runs gate) | Accepted β€” 2026-06-18 | 2026-06-18 | β€” | β€” | | [ADR-0055](./0055-master-detail-controlled-by-parent.md) | Master-detail "controlled by parent" permissions β€” derived access via pre-resolved master-id membership | Accepted β€” 2026-06-19 β€” implemented in this PR (P0–P2) Β· Amended (2026-09-… | 2026-06-19 | β€” | β€” |