Skip to content

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

Merged
os-zhuang merged 5 commits into
mainfrom
claude/issue-4938-http-server-config-retirement
Aug 4, 2026
Merged

refactor(spec)!: 退役 HttpServerConfigSchema —— 九个键零 reader 且没有任何作者面入口 (#4938)#5293
os-zhuang merged 5 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 6:06pm

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.

claude added 3 commits August 4, 2026 17:30
`git merge origin/main` 零冲突,但 os-regen 驱动在生成物上不做文本合并,
所以按流程把 8 条 os-regen 路径整体 checkout 回 origin/main,再全量重跑
生成器(gen:schema / gen:api-surface / gen:spec-changes / gen:upgrade-guide /
gen:docs / gen:skill-refs / gen:skill-docs / gen:strictness-ledger),两侧条目
逐条断言仍在。

- 兄弟侧 #5289:6 条 `ui/Theme` / `ui/Typography` 的 `[RETIRED]` 标记在册;
  `ui/Animation` / `ui/ZIndex` 两个 def 仍不在 manifest;
  `theme-inert-token-scales-removed` 的 D2 条目与 D3 链步完好,并已到达
  `spec-changes.json` 与 protocol-upgrade-guide。
- 本侧 #4938:manifest −1 / authorable −9 / api-surface −3 仍生效;
  两处「有意删除」在新基线 f8cfbb4 上按 #2978#4650 路径 3 重新自证。
- strictness ledger 整体重跑(未手改数字):`system/` 368 → 366,triaged
  总数 476 由 #5289 带入,非本 PR 改动。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ErbEDVAg1No9gdg1pgDAGB
@os-zhuang
os-zhuang enabled auto-merge August 4, 2026 18:08
@os-zhuang
os-zhuang added this pull request to the merge queue Aug 4, 2026
Merged via the queue into main with commit 175d789 Aug 4, 2026
25 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-4938-http-server-config-retirement branch August 4, 2026 18:30
os-zhuang pushed a commit that referenced this pull request Aug 4, 2026
同步 #5289(theme token 退役)、#5293(HttpServerConfig 退役)、#5296 等。

冲突 1 处:`packages/spec/src/migrations/registry.ts` —— step17 `rationale`
的纯追加碰撞(#5021#5015 各追加一段)。按「双方事实都保留」解决:
main 已落地的 theme 段落原样保留,本单段落改写开头衔接语跟在其后。

生成物一律按 os-regen 四步处理:先 `git checkout origin/main --` 取回
main 侧全部 os-regen 路径,再整体重新生成(gen:schema / gen:api-surface /
gen:spec-changes / gen:upgrade-guide / gen:docs / gen:skill-refs /
gen:skill-docs / gen:strictness-ledger),零文本合并、零手改数字。

merge-base gate 现在一次性为三个兄弟单的 5 处整 def 删除背书:
system/HttpServerConfig(9 行)、ui/Animation(2)、ui/EmbedConfig(7)、
ui/NotificationAction(3)、ui/ZIndex(8),全部走 #4650 路径 3。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01ErbEDVAg1No9gdg1pgDAGB
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