Skip to content

feat(protocol): complete ADR-0087 — load-seam handshake, chain backfill 12–15, release artifacts - #2972

Merged
os-zhuang merged 1 commit into
mainfrom
claude/adr-0087-assessment-c3uuuu
Jul 15, 2026
Merged

feat(protocol): complete ADR-0087 — load-seam handshake, chain backfill 12–15, release artifacts#2972
os-zhuang merged 1 commit into
mainfrom
claude/adr-0087-assessment-c3uuuu

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

补齐 ADR-0087 epic(#2643)的全部剩余开发,并将 ADR true-up 到 as-built(新增 Addendum,含 launch-window 豁免政策的成文化)。

P0 遗留三项(D1,#2644 关闭时未完成的部分)

  • Load seam ①(启动再水化):@objectstack/service-packagesys_packages 再水化时执行握手——不兼容的持久化包以结构化 OS_PROTOCOL_INCOMPATIBLE 诊断拒绝并跳过(boot 继续),不再留到深层 .parse() 崩溃;无范围/无法解析的范围宽限放行(绝不误拒)。
  • Load seam ②(code-defined stack):AppPlugin.init() 在 manifest 分解进 registry 之前 fail-fast(assertProtocolCompat),诊断命名 migrate meta 命令。
  • objectstack lint:新规则 protocol/missing-engines-range(warning + fix-it engines: { protocol: '^15' }),仅对声明了 manifest 的配置生效;golden corpus 同步示范最佳实践。
  • 脚手架 stamping:blank 模板 manifest 写入 engines: { protocol: '^15' };scripts/sync-template-versions.mjs 在版本时重新 stamp;template-consistency.test.ts 增加防漂移棘轮。

链回填 12–15 + ADR-0089 改名入册(D2/D3,#2645/#2647)

  • MetadataConversion.retiredFromLoadPath:实现 D2 窗口的后半句("retired in N+1 — but never deleted")——退役条目 loader 跳过,仅由 migrate meta 与 fixture CI 重放。
  • 新增转换条目:
    条目major窗口
    object-compactLayout-to-highlightFields11retired(11.9.1 一步改名的历史回填)
    stack-roles-to-positions / owd-legacy-read-aliases / sharing-recipient-role-to-position13retired(ADR-0090 launch-window 一步改名)
    book-audience-profile-to-permission-set14retired
    view-visibleOn-to-visibleWhen / page-component-visibility-to-visibleWhen15live(ADR-0089 改名正式入 D2 册,Implement ADR-0089: unify conditional-visibility predicate under visibleWhen #2642 的遗留登记项)
  • 新增链步骤 12–15;不可无损的判断以 semantic TODO 显式委托(requireAuth 翻转、ADR-0090 的 profile/层级/CEL/'full' 别名/secure default、15 的 .strict() 翻转)。OWD 'full' 别名因无确定无损目标不做机械转换(D2 scope guard)。
  • 端到端验证:携带全部旧形状的 protocol-10 fixture 经 migrate meta --from 10 --json 一次到 15:11 处机械改写全部正确落位、9 条 semantic TODO 全部浮出。

发布产物(D4,#2647 剩余两项)

  • spec-changes.json:由 registry 生成(gen:spec-changes,CI drift check),随 npm 包发布(连同 api-surface.json),Release workflow 以与上一已发布版本的 api-surface diff 填充 added[]/removed[] 后附加到 @objectstack/spec 的 GitHub Release(scripts/release-spec-changes.sh,复用 ADR-0059 §3 gate 产物)。
  • 生成式升级指南:docs/protocol-upgrade-guide.md 完全由 registry 投影生成(gen:upgrade-guide,CI drift check)——指南不可能再漂移。

ADR true-up

  • Status → Accepted;新增 as-built Addendum:P0–P2 落地记录、retiredFromLoadPath 机制、launch-window 豁免成文(GA 前可一步改名但必须同版落链;GA 后回到完整 D2 阶梯)。
  • P3(ADR-0087 P3: MCP upgrade surface + RC rehearsal discipline #2648)按 ADR Boundaries 保持 deferred / evidence-gated,不在本 PR 范围。

验证

  • @objectstack/spec6803 passed(新增 conversion/migration 测试),check:api-surface 无变化,两个新 drift check 均绿。
  • @objectstack/cli509 passed(含新 lint-protocol-range 测试)。
  • @objectstack/runtime509 passed(含 AppPlugin 握手三例)。
  • service-package / metadata-protocol / metadata-core / service-automation / downstream-contract / create-objectstack 全绿。
  • changeset:五个包 minor(fixed group)。

Refs #2643 · Closes#2645 · Closes#2647 · Refs #2644, #2648 · ADR-0087 / ADR-0089 / ADR-0090

🤖 Generated with Claude Code

https://claude.ai/code/session_01LMCyH8zFQQsnR9r46fhz4c


Generated by Claude Code

…ll 12–15, release artifacts
Closes the remaining gaps of the ADR-0087 epic (#2643); trues the ADR up to
as-built (Addendum) and ratifies the pre-launch launch-window exemption.
P0 leftovers (D1, #2644):
- Handshake on the boot-time durable-package rehydration path: an incompatible
sys_packages row is refused with the structured OS_PROTOCOL_INCOMPATIBLE
diagnostic and skipped (boot continues).
- Handshake on AppPlugin (code-defined stacks): fail-fast before the manifest
is decomposed into the registry.
- objectstack lint: new protocol/missing-engines-range warning with a fix-it.
- create-objectstack blank template stamps engines: { protocol: '^<major>' },
re-stamped at version time by scripts/sync-template-versions.mjs and
ratcheted by template-consistency.test.ts.
Chain backfill (D2/D3, #2645/#2647):
- MetadataConversion.retiredFromLoadPath implements the load-window's second
half: retired entries replay only via migrate meta and the fixture CI.
- New conversions: object compactLayout→highlightFields (11, retired),
stack roles→positions / OWD read aliases / sharing recipient role→position
(13, retired), book audience profile→permissionSet (14, retired),
view visibleOn→visibleWhen + page component visibility→visibleWhen
(15, LIVE window — registers the ADR-0089 rename in the D2 table).
- New chain steps 12–15 with semantic TODOs (requireAuth flip, ADR-0090
profile/hierarchy/CEL/OWD-full/secure-default judgments, .strict() flip).
- migrate meta --from 10 now reaches protocol 15; verified end-to-end on a
fixture carrying every legacy shape (11 mechanical rewrites, 9 TODOs).
Release artifacts (D4, #2647):
- spec-changes.json generated from the registries (gen:spec-changes, CI
drift-checked), shipped in the npm artifact with api-surface.json, and
attached to each @objectstack/spec GitHub Release with added[]/removed[]
from the api-surface diff vs the previously published release.
- docs/protocol-upgrade-guide.md generated from the registries
(gen:upgrade-guide, CI drift-checked) — the guide is now a projection.
Verification: spec 6803 passed, cli 509 passed, runtime 509 passed,
service-package/metadata-protocol/metadata-core/service-automation/
downstream-contract/create-objectstack suites green; check:api-surface
unchanged; both new drift checks green.
Refs #2643, #2644, #2645, #2647, #2648 · ADR-0087, ADR-0089, ADR-0090
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LMCyH8zFQQsnR9r46fhz4c
@vercel

vercelBot commented Jul 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

ProjectDeploymentActionsUpdated (UTC)
specBuildingBuildingPreview, CommentJul 15, 2026 3:00pm

Request Review

@github-actionsgithub-actionsBot added size/xl documentation Improvements or additions to documentation ci/cd dependencies Pull requests that update a dependency file tests tooling labels Jul 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 5 package(s): @objectstack/cli, create-objectstack, @objectstack/runtime, packages/services, @objectstack/spec.

112 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx(via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx(via packages/cli, create-objectstack, @objectstack/spec)
  • content/docs/ai/skills.mdx(via create-objectstack, @objectstack/spec)
  • content/docs/api/client-sdk.mdx(via @objectstack/cli, @objectstack/spec)
  • content/docs/api/data-flow.mdx(via @objectstack/cli)
  • content/docs/api/environment-routing.mdx(via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-catalog.mdx(via @objectstack/cli, @objectstack/spec)
  • content/docs/api/error-handling-client.mdx(via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx(via @objectstack/spec)
  • content/docs/api/index.mdx(via @objectstack/runtime, @objectstack/spec)
  • content/docs/api/wire-format.mdx(via @objectstack/runtime)
  • content/docs/automation/approvals.mdx(via packages/spec)
  • content/docs/automation/flows.mdx(via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx(via packages/cli, @objectstack/runtime, packages/spec)
  • content/docs/automation/hooks.mdx(via @objectstack/spec)
  • content/docs/automation/index.mdx(via @objectstack/spec)
  • content/docs/automation/webhooks.mdx(via packages/services, @objectstack/spec)
  • content/docs/automation/workflows.mdx(via @objectstack/spec)
  • content/docs/concepts/architecture.mdx(via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx(via packages/spec)
  • content/docs/concepts/index.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx(via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx(via packages/spec)
  • content/docs/concepts/north-star.mdx(via packages/runtime, packages/spec)
  • content/docs/data-modeling/analytics.mdx(via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx(via @objectstack/runtime, @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx(via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx(via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx(via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx(via @objectstack/spec)
  • content/docs/data-modeling/index.mdx(via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx(via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx(via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx(via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx(via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx(via @objectstack/spec)
  • content/docs/deployment/backup-restore.mdx(via @objectstack/cli)
  • content/docs/deployment/index.mdx(via @objectstack/runtime)
  • content/docs/deployment/production-readiness.mdx(via @objectstack/runtime)
  • content/docs/deployment/self-hosting.mdx(via @objectstack/cli)
  • content/docs/deployment/single-project-mode.mdx(via @objectstack/runtime)
  • content/docs/deployment/troubleshooting.mdx(via @objectstack/spec)
  • content/docs/deployment/vercel.mdx(via @objectstack/runtime)
  • content/docs/getting-started/build-with-claude-code.mdx(via @objectstack/spec)
  • content/docs/getting-started/cli.mdx(via @objectstack/cli, @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx(via @objectstack/spec)
  • content/docs/getting-started/examples.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx(via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx(via @objectstack/spec)
  • content/docs/getting-started/validating-metadata.mdx(via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx(via @objectstack/cli, create-objectstack, @objectstack/runtime, @objectstack/spec)
  • content/docs/kernel/cluster.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx(via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx(via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx(via packages/spec)
  • content/docs/kernel/index.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/audit-service.mdx(via packages/services)
  • content/docs/kernel/runtime-services/data-service.mdx(via packages/cli)
  • content/docs/kernel/runtime-services/email-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx(via packages/cli, packages/services, packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/settings-service.mdx(via packages/services)
  • content/docs/kernel/runtime-services/sharing-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx(via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx(via packages/spec)
  • content/docs/kernel/services-checklist.mdx(via @objectstack/spec)
  • content/docs/permissions/authentication.mdx(via @objectstack/cli, @objectstack/runtime)
  • content/docs/permissions/authorization.mdx(via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx(via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx(via @objectstack/spec)
  • content/docs/permissions/positions.mdx(via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx(via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx(via @objectstack/spec)
  • content/docs/plugins/development.mdx(via @objectstack/spec)
  • content/docs/plugins/index.mdx(via @objectstack/spec)
  • content/docs/plugins/packages.mdx(via @objectstack/cli, create-objectstack, @objectstack/runtime, packages/services, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx(via @objectstack/spec)
  • content/docs/protocol/diagram.mdx(via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx(via @objectstack/spec)
  • content/docs/protocol/kernel/http-protocol.mdx(via @objectstack/runtime)
  • content/docs/protocol/kernel/i18n-standard.mdx(via packages/services, @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx(via @objectstack/runtime)
  • content/docs/protocol/kernel/lifecycle.mdx(via @objectstack/runtime, @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx(via @objectstack/cli, @objectstack/spec)
  • content/docs/protocol/kernel/realtime-protocol.mdx(via @objectstack/cli)
  • content/docs/protocol/kernel/runtime-capabilities.mdx(via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx(via packages/spec)
  • content/docs/protocol/objectql/query-syntax.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx(via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx(via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx(via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx(via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx(via @objectstack/cli, @objectstack/runtime, @objectstack/spec)
  • content/docs/releases/index.mdx(via @objectstack/spec)
  • content/docs/releases/v12.mdx(via @objectstack/spec)
  • content/docs/releases/v13.mdx(via @objectstack/spec)
  • content/docs/releases/v9.mdx(via create-objectstack, @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx(via @objectstack/spec)
  • content/docs/ui/dashboards.mdx(via @objectstack/spec)
  • content/docs/ui/forms.mdx(via @objectstack/spec)
  • content/docs/ui/index.mdx(via @objectstack/spec)
  • content/docs/ui/setup-app.mdx(via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

@os-zhuangClaude

Copy link
Copy Markdown
ContributorAuthor

CI 说明:Validate Package Dependencies 的失败与本 PR 无关——npm 于 7 月 13 日后退役了 audit 端点(410),pnpm audit 在所有分支上一致失败(pnpm@latest 亦未迁移)。已单独开 #2974 跟踪修复方案。其余 checks 以实际结果为准。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review July 15, 2026 15:25
@os-zhuang
os-zhuang merged commit 8fc1208 into mainJul 15, 2026
18 of 20 checks passed
@os-zhuang
os-zhuang deleted the claude/adr-0087-assessment-c3uuuu branch July 15, 2026 15:25
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cddependenciesPull requests that update a dependency filedocumentationImprovements or additions to documentationsize/xlteststooling

Projects

None yet

2 participants

@os-zhuang@claude