Skip to content

feat(spec)!: retire vestigial feed contracts + protocol surface (#1959)#3186

Merged
os-zhuang merged 1 commit into
mainfrom
claude/retire-feed-contracts-n1mcmj
Jul 18, 2026
Merged

feat(spec)!: retire vestigial feed contracts + protocol surface (#1959)#3186
os-zhuang merged 1 commit into
mainfrom
claude/retire-feed-contracts-n1mcmj

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

背景

ADR-0052 §5 后续、承接 #1959sys_comment / sys_activity 是记录协作/时间线的唯一后端;@objectstack/service-feed运行时已在 #1955 删除。本 PR 清掉残留的纯类型面——它仍指向已删除的运行时,但全部是死代码:

  • feed REST 路由从未挂载 → 404;
  • 协议实现从未接线 feed 服务(生产恒传 undefined /* getFeedService */),requireFeedService() 只可能抛异常。

因此这是 npm 类型面的 breaking 变更,但零行为变化

对 issue #1959 原文的修正:协议实现在 packages/metadata-protocol/src/protocol.ts(objectql 只再导出);client 的 feed 访问器实际到 ~2950 行。

变更内容(按包)

@objectstack/spec

  • 删除 contracts/feed-service.ts(IFeedService)、api/feed-api.zod.ts(FeedApiContracts + 全部请求/响应类型)、data/subscription.zod.ts,及各自 *.test.ts 与 barrel 导出。
  • api/protocol.zod.ts 删 4 个 feed 区域:feed-api.zod import 块、// Feed Operations z.function() 桩、// Feed Types 再导出块、FeedProtocol 接口及其在 ObjectStackProtocol 的 mixin。
  • 再生成 api-surface.jsonjson-schema.manifest.jsoncontent/docs/references/**(api/feed-api.mdx 自动删除,data/feed.mdx 收缩)。

@objectstack/metadata-protocol

  • getFeedService 构造参数/私有字段、requireFeedService()、14 个 feed 方法实现。构造函数签名 (engine, getServicesRegistry?, getFeedService?, environmentId?)(engine, getServicesRegistry?, environmentId?)

@objectstack/objectql

  • protocol-feed.test.ts;同步更新所有位置传参的构造函数调用点(去掉第 3 个 undefined)。

@objectstack/client

  • feed = {…} SDK 访问器及其 feed 响应类型 import/re-export。

明确保留(不动)

  • data/feed.zod.ts 修剪保留 FeedItemType / FeedFilterMode —— 它们是 RecordActivityProps(record 活动时间线 UI 组件,component.zod.ts)的在用配置枚举,与 feed 后端无关。
  • object.zod.tsfeeds: 能力开关、realtime 订阅面、task_feed_import 命名、systemNotificationChannelSchema —— 均为不同概念。
  • client 路由常量 feed: '/api/v1/feed' 暂留(仅为满足 discovery ApiRoutesroutes.feed 类型,已加注释),随 follow-up 一并清理。

版本策略(请维护者确认)

fixed 版本组;protocol-version.test.tsPROTOCOL_MAJOR(15)锁定到包 major,而 major 仅为可著写元数据面的破坏保留。本次未删任何可著写 key(feeds: 开关、RecordActivity 组件配置均保留),故 changeset 用 minor + 醒目的 "Breaking (npm type surface)" + 每个删除项的 FROM→TO 迁移,PROTOCOL_MAJOR 保持 15。若倾向严格 semver 升 major(整组升 16.0.0 + 同步 PROTOCOL_VERSION + ADR-0087 迁移链),请告知。

Follow-up

残留的 discovery/dispatcher feed 能力面(routes.feedWellKnownCapabilities.feed、dispatcher /api/v1/feed 条目、getDiscovery() 中恒为 false 的 feed: 产出),以及 comments 能力也误挂在已删除 'feed' 服务上(现恒 false)需改挂 —— 已开 #3180 跟踪。

验证

  • pnpm turbo run build --filter=!@objectstack/docs —— 71 个任务全绿(spec → metadata-protocol → objectql → client → rest → examples)。
  • pnpm turbo run test --filter=!@objectstack/docs —— 131 个任务全绿。
  • spec 守卫:check:api-surface / check:docs / check:spec-changes / check:skill-refs 全部 in-sync。
  • 全仓 grep 确认无悬挂引用(IFeedService / feed-api.zod / getFeedService / FeedProtocol / client.feed. 等);FeedItemType/FeedFilterMode 仍导出且被 component.zod.ts 消费。

Closes #1959.

🤖 Generated with Claude Code

https://claude.ai/code/session_01HtN5uPoPnFzkSJ2HcwzgtG


Generated by Claude Code

ADR-0052 §5 follow-up. `service-feed`'s runtime was deleted in #1955;
`sys_comment` / `sys_activity` are the canonical record-collaboration /
timeline backend. This removes the dead type surface that still pointed at
the deleted runtime — every removed method was already unreachable (feed
REST was never mounted → 404; the protocol impl was never wired with a feed
service, so requireFeedService() could only throw). No behavior change.

Removed:
- spec: contracts/feed-service (IFeedService), api/feed-api.zod
  (FeedApiContracts + request/response types), data/subscription.zod, and the
  four feed regions of api/protocol.zod (imports, z.function stubs, type
  re-exports, FeedProtocol interface + mixin) — plus their tests and barrels.
- metadata-protocol: the getFeedService ctor param, requireFeedService(), and
  the 14 feed method implementations. Constructor is now
  (engine, getServicesRegistry?, environmentId?).
- objectql: protocol-feed.test.ts + the positional call-site updates.
- client: the feed = {...} SDK accessor and its feed response type imports.

Kept: data/feed.zod trimmed to FeedItemType / FeedFilterMode (live UI config
for the record activity component). Regenerated api-surface.json,
json-schema.manifest.json, and content/docs/references. The residual
discovery/dispatcher feed capability surface is tracked as a follow-up (#3180).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HtN5uPoPnFzkSJ2HcwzgtG
@vercel

vercel Bot commented Jul 18, 2026

Copy link
Copy Markdown

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

Project Deployment Actions Updated (UTC)
spec Ready Ready Preview, Comment Jul 18, 2026 7:52am

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:data tests tooling size/xl labels Jul 18, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 4 package(s): @objectstack/client, @objectstack/metadata-protocol, @objectstack/objectql, @objectstack/spec.

110 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/client, @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/client, @objectstack/spec)
  • content/docs/api/data-flow.mdx (via @objectstack/client)
  • content/docs/api/environment-routing.mdx (via @objectstack/client, @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/client, @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/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @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 @objectstack/metadata-protocol, @objectstack/objectql, packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @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 packages/objectql, @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/migration-from-objectql.mdx (via @objectstack/objectql)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/vercel.mdx (via @objectstack/objectql)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/cli.mdx (via @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/client, @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/data-service.mdx (via packages/client)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/client, packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • 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/objectql, @objectstack/spec)
  • content/docs/kernel/services.mdx (via @objectstack/objectql)
  • content/docs/permissions/authentication.mdx (via @objectstack/client, @objectstack/objectql)
  • 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/rls.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/objectql, @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/client, @objectstack/objectql, @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/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/objectql)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/realtime-protocol.mdx (via @objectstack/client)
  • 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/objectql, @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/client, @objectstack/objectql, @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 @objectstack/objectql, @objectstack/spec)
  • content/docs/ui/actions.mdx (via @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/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.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-zhuang
os-zhuang marked this pull request as ready for review July 18, 2026 08:59
@os-zhuang
os-zhuang merged commit 668dd17 into main Jul 18, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the claude/retire-feed-contracts-n1mcmj branch July 18, 2026 08:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:data size/xl tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Retire vestigial feed contracts + protocol surface (ADR-0052 §5 follow-up)

2 participants