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-highlightFields 11 retired(11.9.1 一步改名的历史回填)
    stack-roles-to-positions / owd-legacy-read-aliases / sharing-recipient-role-to-position 13 retired(ADR-0090 launch-window 一步改名)
    book-audience-profile-to-permission-set 14 retired
    view-visibleOn-to-visibleWhen / page-component-visibility-to-visibleWhen 15 live(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/spec 6803 passed(新增 conversion/migration 测试),check:api-surface 无变化,两个新 drift check 均绿。
  • @objectstack/cli 509 passed(含新 lint-protocol-range 测试)。
  • @objectstack/runtime 509 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

vercel Bot commented Jul 15, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
spec Building Building Preview, Comment Jul 15, 2026 3:00pm

Request Review

@github-actions github-actions Bot 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.

Copy link
Copy Markdown
Contributor Author

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 main Jul 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 free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci/cd dependencies Pull requests that update a dependency file documentation Improvements or additions to documentation size/xl tests tooling

Projects

None yet

2 participants