Skip to content

refactor(spec)!: 退役 HttpServerConfigSchema —— 九个键零 reader 且没有任何作者面入口 (#4938) - #5293

Open
os-zhuang wants to merge 2 commits into
mainfrom
claude/issue-4938-http-server-config-retirement
Open

refactor(spec)!: 退役 HttpServerConfigSchema —— 九个键零 reader 且没有任何作者面入口 (#4938)#5293
os-zhuang wants to merge 2 commits into
mainfrom
claude/issue-4938-http-server-config-retirement

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #4938

按 2026-08-04 维护者裁决(A —— 退役不可达面,cors 登记为窄形状首个准入候选)执行。

前提复核(立单基线是 #5006 之前,已在当前 origin/main @ 3905c00 重测)

前提成立。零命中结果按要求做了反向对照:

$ git grep -n "HttpServerConfig" origin/main -- '*.ts' ':!*/node_modules/*' ':!*/dist/*'
packages/spec/src/shared/http.zod.ts:66,118,156        ← 只是 "Used by:" 注释
packages/spec/src/stack.zod.ts:368                     ← #5006 写下的说明性注释
packages/spec/src/system/http-server.{zod,test}.ts
packages/spec/src/system/stack-server.{zod,test}.ts    ← #5006 的「为什么不是它」
(spec 之外零命中)

阳性对照 —— 窄形状的 trustProxy 确实有大量 live reader,证明测法本身有效:

packages/cli/src/commands/serve.ts:2016            trustProxy: serverConfig.trustProxy === true,
packages/runtime/src/dispatcher-plugin.ts:539,562,1365
packages/runtime/src/endpoint-policy.ts:188,311
packages/runtime/src/security/inbound-rate-limit.ts:123,166,246
packages/plugins/plugin-hono-server/src/adapter.ts:628
(+ 三个 runtime 测试文件)

stack.zod.ts:374 的窄 server: 键存在(StackServerConfigSchema),其 guidance 文本确实按名拒绝另外七个键。作者面另两项也复核过:config-schema.jsonHttpServerConfig 零命中,service-settings/src/manifests/ 无 http/server manifest。

一处与派单预期不符:退役的是容器,不是整个文件

派单说明预期「whole-file retirement of system/http-server.zod.ts(参照 #4834/#4878 形态)」。这个形态会破坏两个 live consumer,证据:

packages/rest/src/route-manager.ts:8       type RouteHandlerMetadata = System.RouteHandlerMetadata;
packages/runtime/src/middleware.ts:4       import { MiddlewareConfig, MiddlewareType } from '@objectstack/spec/system';

裁决原文写的是「HttpServerConfigSchema 不可达面(七死键连同容器)」—— 容器,不是文件。所以本 PR 删的是 HttpServerConfigSchema / HttpServerConfig / HttpServerConfigInputHttpServerConfig.create() helper,文件本身与其余导出留下。同文件里的 ServerEvent* / ServerCapabilities / ServerStatus 也零消费者,但它们是响应/能力形状而非 authorable 配置,不在本裁决范围内,未动。

路线:不打 tombstone,也不注册 D2 conversion

playbook 路线 3(「nothing parses it → neither」),#4834 / PR #4878 同形。理由不是省事:

gate 侧也是这样判的,输出留在这里当路线证据:

❌ 1 previously published schema(s) disappeared from this build:
     - json-schema/system/HttpServerConfig.json          ← #2978 ratchet 先开火,要求有意删 manifest key
...
ℹ️  1 baseline deletion(s) since 3905c0064e13 carry their own proof (#4650):
     - system/HttpServerConfig:* (9 line(s)) — def no longer emitted by this build; whole-schema
       removals are adjudicated by json-schema.manifest.json (#2978) and check:api-surface.

四张 ratchet 的读数符合 playbook 里「整 def 删除 → 必须变化」那一栏:api-surface.json −3、authorable-surface.json −9、json-schema.manifest.json −1。api-surface-signatures.json 无变化(它哈希的是 defineX 工厂签名,本次没有工厂参与);spec-changes.json / protocol-upgrade-guide.md 无变化,因为提交态副本的 added/removed 只在 release 时用 --previous-surface 填充,这是设计而非漏跑。

反向验证(方向在跑之前就定了)

预测:把删掉的肢体粘回去,新 pin 应当转红(普通的红向,不是 #5046 那种「诊断变多」也不是 #5018 那种倒置)。实测一致 ——

× no longer exports the value `HttpServerConfigSchema` 7ms
× no longer exports the value `HttpServerConfig` 1ms
× does not re-export the removed shape from the system barrel either 2058ms
 Test Files  1 failed (1)      Tests  3 failed | 26 passed (29)

一条要如实说明的:我最初还写了两条类型层 @ts-expect-error pin 来守 HttpServerConfigInput(type-only,运行时 in 看不见)。它是幽灵检查 —— 把指令行删掉,typecheck 仍然绿,两种状态都不报错,因为 packages/spec/tsconfig.jsonexclude**/*.test.ts,而该包的 typecheck 就是裸 tsc --noEmit。据此撤掉了那两条,改在注释里写明该类型的见证是 api-surface.json。这个 tsconfig 问题另行立单(见下),因为树上已有约 14 条同类退役 pin 正躺在同一个盲区里。

验证

  • pnpm --filter @objectstack/spec build / typecheck — 通过
  • pnpm --filter @objectstack/spec test308 passed (308) / 7946 passed (7946)
  • 11 张 spec gate 全绿:check:liveness / check:empty-state / check:authorable-surface / check:docs / check:api-surface / check:spec-changes / check:upgrade-guide / check:skill-refs / check:skill-docs / check:skill-examples / check:strictness-ledger
  • 消费者侧:@objectstack/runtime typecheck 通过,@objectstack/rest build(含 DTS)通过
  • node scripts/check-nul-bytes.mjs 通过,并对改动文件做了越过 gate 盲区的自扫([\x00-\x08\x0b\x0c\x0e-\x1f],零命中)
  • 无 liveness ledger 条目需要动(http_server 不是 metadata type,packages/spec/liveness/ 里零命中);无 .form.ts 输入需要剪,故无 i18n 变化
  • strictness ledger 按 build(spec): strictness 台账数字/散文分家 —— 计数转 os-regen 生成物,Class 判定与依据保持手写 (#5107, #5072) #5220 整体重跑 gen:strictness-ledger(未手改任何数字):system/ 368 → 366,triaged 的 484 sites / authorable 15 不受影响(system/ 属未 triage 目录)

顺带发现(未在本 PR 修)

🤖 Generated with Claude Code

https://claude.ai/code/session_01ErbEDVAg1No9gdg1pgDAGB


Generated by Claude Code

claude added 2 commits August 4, 2026 15:59
#4938)

`system/http-server.zod.ts` 的 `HttpServerConfigSchema` 声明九个键
(`port` / `host` / `cors` / `requestTimeout` / `bodyLimit` / `compression` /
`security` / `static` / `trustProxy`),`authorable-surface.json` 全部在册、
`content/docs/references/` 全部渲染成协议文档。两头都是空的:

1. **零 runtime reader** —— 三个仓(objectstack / cloud / objectui)里没有任何
   包用它解析过文档或读过它的键;spec 之外唯一的命中是 `shared/http.zod.ts`
   里指回来的 "Used by:" 注释。
2. **零作者面入口** —— 比普通的「写得下去、不生效」更彻底。`stack.zod.ts`
   没有 `server:` 键,`config-schema.json` 里零命中,也没有 settings manifest
   承载它,所以文档承诺的这套配置连**写下去**都做不到。

按 ADR-0049 enforce-or-remove 与 2026-08-04 裁决,退役这个不可达面。

退役形态是**容器,不是整个文件**:`RouteHandlerMetadata`(`packages/rest`
消费)与 `MiddlewareType` / `MiddlewareConfig`(`packages/runtime` 消费)
留下;`shared/http.zod.ts` 的 `CorsConfigSchema` / `RateLimitConfigSchema` /
`StaticMountSchema` 各自另有 live consumer,也未被孤立。

**不打 `retiredKey()` tombstone**(playbook 路线 3,#4834 / PR #4878 同形):
tombstone 是给「写下这个键的人」的话,而唯一能写 server 键的面是 #5006 的
`StackServerConfigSchema`,它是 `strictObject`,七个键早已按名拒绝并各带处方 ——
本 PR 把那些处方从「no runtime reads it」刷新为指明退役与替代。**不注册 D2
conversion**:没有任何作者源需要改写。代码消费者的通道是 `api-surface.json`
(−3)接 release-time 的 `spec-changes.json` diff,加上 changeset。

`cors` 按裁决登记为 `server:` 窄形状的**首个逐键准入候选**(嵌入是真场景),
届时按 #4910 范式键与执行器一并到位,不以死键形态占导出面。

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

vercel Bot commented Aug 4, 2026

Copy link
Copy Markdown

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

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 4, 2026 4:01pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation protocol:system tests tooling size/m labels Aug 4, 2026
@github-actions

github-actions Bot commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 1 package(s): @objectstack/spec.

107 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 @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @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 @objectstack/spec)
  • content/docs/automation/connectors.mdx (via @objectstack/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 packages/spec)
  • content/docs/concepts/north-star.mdx (via @objectstack/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 @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/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.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/your-first-project.mdx (via @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/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via 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/spec)
  • content/docs/kernel/services.mdx (via @objectstack/spec)
  • 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/spec)
  • content/docs/plugins/packages.mdx (via @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/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/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/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/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v17.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @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.

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:system size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

system/HttpServerConfigSchema 九个键全仓零 reader,且没有任何作者面入口(defineStackserver:,不在 config-schema)

2 participants