feat(platform-objects,service-settings,verify): sys_secret 密文库改由平台基础设施注册 (#4270) - #4275
Merged
Merged
Conversation
…施注册 (#4270) sys_secret(ADR-0066 D2/④ 的环境加密密钥库)此前由 service-settings 注册,但它有三类生产者且只有一类是 settings:SettingsService 的加密设置项、ObjectQL 引擎自身的 secret 字段加解密(encryptSecretFields/resolveSecret——任何带 Field.secret() 的业务对象的通用写路径)、service-datasource 的凭证 binder。与 #4243 不同,这里的失败姿态是 fail-closed:没这张表时任何 secret 字段写入直接抛错,且报错文案指认 platform-objects——一个此前并不注册它的包。 注册点改为 PlatformObjectsPlugin(与 #4258 对 SysMigration 的处理一致):init 经 manifest 服务注册 [SysMigration, SysSecret]。os serve 本就自动注入该插件,每个被服务的内核都带密文库,与是否装 settings 无关;引擎那句报错从此为真。settingsObjects 摘除 SysSecret(移除而非并存,#4236)——settings 仍是生产者/消费者,只是不再是注册者。定义归属不变(sys_secret 仍在 platform-objects 与 PLATFORM_OBJECTS_BY_PACKAGE)。 verify harness 补组 PlatformObjectsPlugin,对齐 serve 装配(该漂移自 #4258 起存在);harness 内核随之首次带上 sys_migration 账本 + 空库 attestation,dogfood 全套在该姿态下通过。同步修掉两处失真注释:sys-secret.object.ts 的「All writes flow through SettingsService」与 manifest.ts 的「Objects owned by service-settings」。 语义变化面:手工组装 SettingsServicePlugin 而不组 PlatformObjectsPlugin 的嵌入式内核不再获得 sys_secret 表(secret 写入 fail-closed 抛错,永不落明文);changeset 已写明迁移句。 Closes #4270 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 4 package(s): 23 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…ducer-conflict-157867
…ducer-conflict-157867
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #4270
改了什么
按 #4258(
sys_migration,closes #4243)确立的「平台系统对象由平台层注册」落脚点,把sys_secret的注册从 service-settings 挪到PlatformObjectsPlugin:PlatformObjectsPlugin.init现在注册[SysMigration, SysSecret](经 manifest 服务,scope: system)。os serve本就自动注入该插件,所以每个被服务的内核都带密文库,与是否装 settings 无关。settingsObjects摘除SysSecret,只剩[SysSetting, SysSettingAudit]——移除而非并存(sys_migration由 service-storage 持有,但它是平台级账本 —— 第二个消费者出现后这层耦合该解开 #4236 提醒过双注册问题),settings 服务仍是sys_secret的生产者/消费者(经其 secret store),只是不再是注册者。PlatformObjectsPlugin,与 serve 的装配对齐(harness 自 feat(platform-objects,service-storage,cli): sys_migration 账本改由平台基础设施注册 (#4243) #4258 起就漂移了:serve 有该插件、harness 没有)。这也让 harness 内核首次带上sys_migration账本 + 空库 attestation——dogfood 全套在该姿态下通过。sys-secret.object.ts的「All writes flow through SettingsService」(实际引擎encryptSecretFields绕过 SettingsService 直写 driver)与manifest.ts的「Objects owned by service-settings」;serve.ts5c 注释同步提及sys_secret。为什么
sys_secret有三类生产者,只有一类是 settings:SettingsService(加密设置项)、ObjectQL 引擎自身(encryptSecretFields/resolveSecret——任何带Field.secret()的业务对象的通用写路径)、service-datasource(凭证 binder)。且失败姿态是 fail-closed:没这张表时任何 secret 字段写入直接抛错,而报错文案说「Ensure the platform-objects (sys_secret) are registered」——指认的责任方此前并不注册它。本次改完,这句报错成为真话。验证
packages/platform-objects/src/plugin.test.ts:注册断言更新为[SysMigration, SysSecret],并加sys_secret由 service-settings 注册,但它有三类生产者且引擎自己就是其一 —— 而且是 fail-closed #4270 pin。packages/services/service-settings/src/manifest.test.ts(新增):pinsettingsObjects恰为 K/V + audit,且不含sys_secret(防双注册回归)。turbo run test:132 任务全绿(含 dogfood field-zoo 的 secret 字段 HTTP 往返——现在走的就是 platform-objects 注册的表);合并最新 main 后复跑。pnpm dev -- --fresh起 showcase,REST 写showcase_field_zoo.f_secret成功、读回为掩码••••••••、sys_secret恰有一行{namespace: showcase_field_zoo, key: f_secret, alg: aes-256-gcm, kms_key_id: local:v1}。语义变化面
手工组装
SettingsServicePlugin而不组PlatformObjectsPlugin的嵌入式内核不再获得sys_secret表(secret 写入将 fail-closed 抛错,永不落明文)。changeset 已写明迁移句:补组PlatformObjectsPlugin即可——所有仓内受支持装配路径(serve / data-migration / verify)均已自带。🤖 Generated with Claude Code