feat(spec)!: EnvironmentArtifact 信封收敛为单一声明 —— C10 双源清账,./system 持活 wire 形,./cloud re-export (#4740) - #4767
Merged
os-zhuang merged 3 commits intoAug 3, 2026
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
Contributor
📓 Docs Drift CheckThis PR changes 1 package(s): 107 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:
|
…re 形,./cloud re-export (#4740) `EnvironmentArtifact(Input|Schema)` 曾由 `./cloud` 与 `./system` 各自导出一个 声明:cloud 侧是活的 wire 形(checksum 为 64 位 hex 字符串、metadata = ObjectStackDefinitionSchema),全仓唯一 runtime Zod parse (packages/metadata/src/plugin.ts `_parseAndRegisterArtifact`)与 cloud 仓 3 处 type import 都用它;system 侧是文档化「v0」(checksum 对象、分类袋 metadata、内联 functions[]、必填 manifest、payloadRef 保留位),三仓 (objectstack / cloud / objectui)import 级实测零代码消费者、从未有 producer 产出过。两侧互相解析不过。按维护者裁决(#4740,路线 A′)收敛: - system/environment-artifact.zod.ts 重写为活 wire 形(唯一声明); Sha256Digest(Schema) 随声明搬入 ./system(./cloud 仍导出) - cloud/environment-artifact.zod.ts 改为纯 re-export(同一符号,两个入口) - 从未实现的 functions / manifest / payloadRef 走 retiredKey() tombstone 退役(ADR-0049):tsc 处 never、parse 处 prescription;无 ADR-0087 conversion —— 信封是传输形状,不落 sys_metadata、不在 conversion walker 的 stack 树上,存量行不可能携带(#4734 先例逐条评估,论证见 PR) - v0 家族 16 个导出名(8 const + 8 type)自 ./system 移除;9 个 system/EnvironmentArtifact* def 停止发布(json-schema.manifest.json #2978 蓄意删键;authorable-surface 46 行经 #4650 门禁 7 组「def no longer emitted」自证删除) - 符号身份 pin(compiler API,exports-map 枚举 16 入口 + 防空转守卫): 三名字全入口唯一解析到 src/system/environment-artifact.zod.ts;S1 (重加被删名)/ S2(cloud 侧新声明的禁止路线)sabotage 均红 - #4666 盲区:checksum 对象→字符串是 key 级门禁不可见的类型变更,parse pin 钉住(旧对象形 → 拒;64 位 hex 字符串 → 过),changeset 显式警示 - packages/metadata runtime parse 一字未动(收敛目标即其已解析形状), 14 文件 290 测试全绿 - north-star.mdx §6.3 锚点同步(单一声明 + re-export;字段清单改为 wire 形) - 基线 6 → 3(dual-source-exports.baseline.json 删 3 行) - changeset:@objectstack/spec major(移除 16 个已发布导出名,TS2305), 零元数据迁移;strictness-ledger 实跑零变化 Fixes #4740 Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 Co-authored-by: Claude <noreply@anthropic.com>
build-docs.ts 把 docblock 按行拆成独立段落,`system/environment-artifact.zod.ts` 头注中断行后有一行以 `import ` 开头,MDX/acorn 将其解析为 ESM import 语句, `content/docs/references/system/environment-artifact.mdx` SyntaxError。改写措辞 (「so the chosen entry point can never change the shape a consumer gets」), 重生成后两个 environment-artifact.mdx 均无行首 `import `/`export `(代码围栏内 的 TypeScript Usage 示例不受影响),`pnpm --filter @objectstack/docs build` exit 0,`check:docs` 248 文件同步。 生成器坑本体(docblock 行成段 + 行首 import 炸 MDX,#4696 家族)记入 PR 顺带 发现,不在本 PR 修生成器。 Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 Co-authored-by: Claude <noreply@anthropic.com>
…§7) os-regen merge driver 对 json-schema.manifest.json / authorable-surface.json / api-surface.json 不做文本合并,rebase 回退了蓄意手删;本 commit 重放:manifest 删 system/EnvironmentArtifact* 9 键 + system/Sha256Digest 在列,authorable-surface 删 46 行(#4650 门禁以新 merge-base 695cfbd 重新自证,7 组「def no longer emitted」),api-surface / spec-changes / upgrade-guide / docs 全量重生成。 复验:check:generated 8/8、check:dual-source-exports(基线 6 → 3)、 strictness-ledger / variant-docs / liveness / empty-state 全绿;spec 测试 292 文件 / 7348 全过;全仓 typecheck 122/122;docs 产物无行首 import/export (Build Docs 措辞修复在 rebase 后仍生效)。 Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 Co-authored-by: Claude <noreply@anthropic.com>
os-zhuang
force-pushed
the
claude/issue-4740-environment-artifact-dual-source
branch
from
August 3, 2026 05:19
b4789ed to
5d13031
Compare
os-zhuang
marked this pull request as ready for review
August 3, 2026 05:20
os-zhuang
enabled auto-merge
August 3, 2026 05:20
os-zhuang
deleted the
claude/issue-4740-environment-artifact-dual-source
branch
August 3, 2026 05:43
This was referenced Aug 3, 2026
os-zhuang
pushed a commit
that referenced
this pull request
Aug 3, 2026
…dual-source 生成物冲突按 #4535 §7 重新生成,不做文本合并: - json-schema.manifest.json:合并会静默复活 C10 蓄意删除的 9 个 system/EnvironmentArtifact* 键(gen:schema 实测报 disappeared),故取 main 版本后由 gen:schema 重新落我方 RENAMED_DEFS 承接(studio/ActionLocation → studio/ActionContributionLocation),delta 对 main 恰 ±1 行 - 两张 shrink-only ratchet(dual-source / docs-import-surface)不归 merge driver 管,手工解冲突:取 main 版本后只删本单那一行,diff 对 main 为纯单行删除 - api-surface.json / references 由 gen:api-surface + gen:docs 从合并树重生成 - authorable-surface.json 与 main 逐字节一致(0-key carry 复证) Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 Co-authored-by: Claude <noreply@anthropic.com>
This was referenced Aug 3, 2026
akarma-synetal
pushed a commit
to akarma-synetal/framework
that referenced
this pull request
Aug 3, 2026
…ctstack-ai#4634,ADR-0049) (objectstack-ai#4783) * feat(spec)!: 退役 DriverCapabilities 31 个零读者能力位 —— 全表活性审计,3 活 31 死 (objectstack-ai#4634) objectstack-ai#4484 findStream 收尾发现 streaming 位指向已删除的契约方法;按 issue 自述倾向对 DriverCapabilitiesSchema 全部 34 位做两仓活性审计(objectstack + cloud,objectui 零引用确认):仅 queryDateGranularity(engine 聚合分派 + date-bucket parity)、 autonumber(engine 让渡自增生成)、batchSchemaSync(engine 与方法存在性 AND) 三位有决策读者;其余 31 位人人写、无人读,describe 承诺的引擎降级路径从未存在, 且零读者让写错的值(SqlDriver streaming:false 却实现 findStream;InMemoryDriver streaming:true 却全表物化)三个版本无人发现 —— ADR-0078 假可供性。 - driver.zod.ts:31 位 retiredKey() 墓碑(非 strict schema,裸删会被静默剥离; DriverConfigSchema.capabilities 及 SQL/NoSQL 扩展确有 parse 路径),逐位 prescription 指明真实机制(方法存在性门控:beginTransaction / aggregate / syncSchema;objectstack-ai#4001 教训);batchSchemaSync .default(false) → .optional() (两处读者本就按缺省=false 消费) - ADR-0087 评估(objectstack-ai#4484/objectstack-ai#4764 先例):driver 是代码不是 stack 树元数据, supports 字面量在 driver 类里、DriverConfig 是插件 TS 配置,均非 sys_metadata 形态(stack 树近邻 datasource.capabilities 已于 objectstack-ai#4583 单独退役)⇒ 不登记 D2 conversion,登记 D3 semantic migration driver-capabilities-inert-bits-removed - driver 字面量同步:memory {} / mongodb { batchSchemaSync: true } / sql { queryDateGranularity, autonumber, batchSchemaSync: false } - 回归 pin(driver.test.ts):31 位逐位 parse 拒绝 + prescription 断言; compiler-API 断言 34 键形状且退役位类型坍缩为 undefined、活位可写(反空转 守卫);S1(schema 复活 streaming)5 pin 红、S2(driver 字面量复活)TS2416 红,均实跑验证后还原 - 生成物:authorable-surface 31 行 [RETIRED]、spec-changes / upgrade-guide / references docs 全量再生成;14 项 spec 门禁全绿,全仓 typecheck 122 任务绿 - changeset:spec + 三 driver 包 major,FROM→TO 映射与一行修复齐备 Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 * chore(spec): merge main(含 C10 objectstack-ai#4767)后按规重整生成物 —— 三敏感文件取 main 版再重生成 json-schema.manifest.json / authorable-surface.json / dual-source-exports.baseline.json 一律先取 origin/main 版本(避免静默复活 C10 蓄意删除的 system/EnvironmentArtifact* 键),再以合并后源码全量重跑 gen:schema/check:generated:DriverCapabilities 31 行 [RETIRED] 由生成器重新写入,manifest 与 authorable-surface 中 C10 删键保持已删 (实测两文件 system/EnvironmentArtifact 零残留)。8/8 生成物门禁 + 8 项源码审计 全 PASS,spec 292 文件 7374 测试全绿。 Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 --------- Co-authored-by: Claude <noreply@anthropic.com>
akarma-synetal
pushed a commit
to akarma-synetal/framework
that referenced
this pull request
Aug 3, 2026
…endencySchema —— 双源清账 C7,裸名唯一归 ./cloud (objectstack-ai#4741) (objectstack-ai#4789) `PackageDependency` / `PackageDependencySchema` 曾由 `./cloud` 与 `./kernel` 各自 导出一个声明,键集完全不相交(0 个共享属性):cloud 侧 `{packageId, versionRange, optional}` 是作者写进包清单的**声明形**,kernel 侧 `{name, versionConstraint, type, resolvedVersion}` 是解析器在依赖图上走的**解析形**。两边都不是 `.strict()`, 把一侧文档粘到另一侧只会静默剥键而非报错(objectstack-ai#4411 陷阱 / ADR-0104 silent-strip)。 两个概念而非两种拼写 ⇒ ADR-0112 D9(a),按维护者裁决改名 kernel 侧;cloud 侧保名。 - `RENAMED_DEFS` 承接 kernel/PackageDependency → kernel/ResolvedPackageDependency (4 keys carry:name / versionConstraint / type / resolvedVersion 全数健在) - 零 tombstone、零 ADR-0087 conversion(无 key 离开契约,已按 objectstack-ai#4767 retiredKey() 先例逐条评估后排除);零形状变更、零词表变化、默认值原样并由 parse pin 钉住 - `PluginSecurityProtocol.PackageDependency` → `.ResolvedPackageDependency` - 同前缀近邻 PackageDependencyConflict / PackageDependencyResolutionResult 未动 - dual-source 基线 3 → 1(本簇 2 行经门禁 stale 分支点名自证删除) - 幽灵页 references/cloud/plugin-security.mdx 随 gen:docs 自愈(objectstack-ai#4696 语境), cloud 侧 PackageDependency 归位到 package-version.mdx - compiler-API 符号身份 pin(exports map 全 16 入口枚举 + 防空转守卫 + holders 精确相等);S1/S2 sabotage 实证见 PR 三仓 import 级实测:objectstack / cloud / objectui 对 kernel 侧零外部 importer。 major(TS2305)、零元数据迁移。 Claude-Session: https://claude.ai/code/session_0176qgxgCXTJCUv4YFLtusP9 Co-authored-by: Claude <noreply@anthropic.com>
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.
Fixes #4740(#4535 C10,第二批)。维护者裁决路线 A′:
./system收敛为单一声明、取活的 wire 形状,./cloudre-export 同一声明;从未实现的functions/manifest/payloadRef走spec-property-retirement退役。基线 6 → 3。真源判定(import 语句级,三仓复核)
扫描基线:objectstack 本分支(base
832047c57,含 C13+C15)/ cloud @5df2c69(= origin/main)/ objectui @785b8a5d(= origin/main)。EnvironmentArtifact*/Sha256Digest*命中packages/metadata/src/plugin.ts(runtime parse,@objectstack/spec/cloud)+ spec 自身两侧源文件与测试objectos-runtime/src/artifact-api-client.ts:25、service-cloud/src/registry-reader.ts:26(均 type-only import 自@objectstack/spec/cloud);其余命中为其本地EnvironmentArtifactResponse(extends spec 类型)与注释cloud 侧手拷形状复查:
file-artifact-api-client.ts的as EnvironmentArtifactResponse铸型与routes/cloud.ts的组装代码都引用 spec 类型(非重复声明),其注释「EnvironmentArtifactSchema requires a 64-char hex string」与收敛后形状一致 —— 本簇未发现新的手拷双源。system 侧「v0」家族(checksum 对象、分类袋 metadata、内联
functions[]、必填manifest、payloadRef)三仓零代码消费者、从未有 producer 产出(CLI compile 写裸 definition,函数走独立 runtimeModule;控制面cloud-artifact-helpers.ts一直写 hex 字符串 checksum)。两侧互相解析不过(checksum 类型硬冲突)⇒ 收敛必须先裁形状,裁决即「实况 wire 形」。实施
system/environment-artifact.zod.ts重写为活 wire 形(lazySchema同 cloud 旧声明;Sha256Digest(Schema)随声明搬入,./cloud仍导出);cloud/environment-artifact.zod.ts改为纯 re-export + 指路注释。./system移除;9 个system/EnvironmentArtifact*def 停止发布。真退役,未进RENAMED_DEFS(该表不变式:没有 key 离开契约;本簇 key 确实离开)。packages/metadata/src/plugin.ts一字未动:收敛目标就是它已在解析的形状(实测 14 文件 290 测试全绿)。north-star.mdx§6.3 锚点同步:单一声明 +./cloudre-export;字段清单改为 wire 形(checksum 为 SHA-256 hex 字符串、metadata 为编译产物本体、可选 builtAt/builtWith)。docs-import-surface.baseline.json删 2 行 stale(两个 enum 的 no-type-export 例外,门禁点名)。退役三键:tombstone + conversion 评估(#4734 先例,不许沉默跳过)
functions/manifest/payloadRef走retiredKey()tombstone:作者写入在tsc处得never、在 parse 处得 prescription(含 FROM→TO 与一行修复),不是静默剥离。判定:无需 ADR-0087 D2/D3 conversion。 #4734(
objectEnableTrashMruRemoved)需要 conversion 是因为存量 16.xsys_metadata行可能携带enable.trash/mru;本簇不同:信封是传输形状 —— ① 不作为sys_metadata行落库(runtime 每次 boot 从 artifact 源重新 parse);② conversion walker 只走 stack 树(mapCollection(stack, ...)),信封不在树上,fixture 写不出能跑到的(converge-activation-event-schemachangeset 同款论证);③ 三键从未有 producer 产出,at-rest artifact 文件(cloud R2 / file source)全部是 wire 形。tombstone prescription 即迁移文档。gate (b) 对此的实跑印证:def 不再发出 ⇒ 46 行走 #4650 路径 3 自证(见下),spec-changes.json/ upgrade-guide 零变化(check:spec-changes/check:upgrade-guidePASS)。checksum对象→字符串、metadata分类袋→受校验的 ObjectStackDefinition,都是 key 级门禁不可见的类型变更(key 两侧同名同在)。changeset 显式承载;parse pin 钉住:旧{ algorithm, value }对象形 → 拒,64 位 hex 字符串 → 过。对./cloudimporter 零变化;对./systemimporter 是类型变更(实测三仓零 importer)。#4650 删行自证(门禁实跑,merge-base 锚定
832047c57)(46 行全部经路径 3「整 def 不再发出→归 manifest ratchet 管辖」;
json-schema.manifest.json同步删 9 键 + 新增system/Sha256Digest,#2978 蓄意移除通道。)check:dual-source-exports实跑:符号身份 pin + sabotage(C6 #4745 / C16 #4752 手法)
pin(
src/system/environment-artifact.test.ts):TypeScript compiler API,从 package.json exports map 枚举全部 16 入口(防新入口逃逸)+ 防空转守卫(module symbol 必解析、./system表面 >100 导出);三名字全入口唯一解析到src/system/environment-artifact.zod.ts,./cloud必须是同符号 re-export,v0 家族 16 名在任何入口出现即红;runtime 命名空间同一性(cloud.EnvironmentArtifactSchema === system.EnvironmentArtifactSchema,同一 binding)。EnvironmentArtifactManifestSchema新声明 ⇒ 2 测试红:AssertionError: ./system must not name EnvironmentArtifactManifestSchema(compiler pin + runtime namespace pin 双拦)。z.object声明 ⇒ 2 测试红:AssertionError: ./cloud must resolve `EnvironmentArtifact` to the ./system declaration: expected 'src/cloud/environment-artifact.zod.ts…' to be 'src/system/environment-artifact.zod.t…'。验证清单(全部实跑,exit code 显式捕获)
check:dual-source-exports(3 行删除自证)check:generated(8 生成物:spec-changes / upgrade-guide / skill-docs / skill-refs / react-blocks / authorable-surface / api-surface / docs)check:strictness-ledger(system 侧.passthrough()删除后实跑)check:variant-docs/check:liveness/check:empty-state/check:skill-examples/check:exported-anypnpm build --filter @objectstack/spec@objectstack/metadata测试(runtime 消费者)pnpm --filter @objectstack/docs build(Build Docs 修复后)check:docs248 文件同步定级(据实,§5)
major:
./system16 个已发布导出名移除(TS2305 同形于 C14/C16,实测三仓 import 级零命中)。零元数据迁移:被删 def 均不从BUILTIN_METADATA_TYPE_SCHEMAS可达(门禁真图实跑,上方 7 组自证);runtime 行为零变化。changeset:.changeset/environment-artifact-dual-source-c10.md。顺带发现(不在本 PR 修)
import/export词会被 MDX/acorn 当作 ESM 语句解析,整页 SyntaxError(本 PR 首版system/environment-artifact.mdx实证,Build Docs 红)。本 PR 以改写头注措辞规避(commitb4789ed7d),生成器本体的按行成段行为未动 —— 与 build-docs.ts 的 schema→页面索引按「裸名字」全局建表,同名跨 category 的 schema 会被归到错误的页面 #4696(按裸名索引)同属 build-docs.ts 的结构性问题,修复应在生成器侧(按段落而非按行拆分,或对行首 ESM 关键词转义)。分区与入队
只动
./system+./cloud入口相关文件 + 生成物 + 文档(packages/metadata零改动);未触 api/automation/integration/ui/studio 区。base832047c57(含 C13+C15 #4760);按串行入队协议,入队前 rebase+重生成由 PM 另行指令。