资讯详情 Zerolang 投影(Projection)机制详解:`.0` 文本与 `zero.graph` 的显式同步模型
📅 2026/10/13 2:58:04
【免费下载链接】zerolangThe Programming Language for Agents项目地址https://gitcode.com/gh_mirrors/zero54/zerolang点击查看免费下载.0文件是 Zerolang 仓库图中面向人类的可读投影它们不是 agent 的常规写入面而是供人类评审、手工修改与诊断定位使用的文本视图。本篇基于 docs/articles/concepts/projections.md 展开结合仓库中zero export / import / verify-projection / status四个命令的真实实现与一致性测试讲透图为主、文本为辅、显式同步、绝不静默漂移的设计原则。读完你将掌握为什么投影必须存在、四种同步命令各自何时使用、RGP006/RGP008诊断与ZERO_STALEfail的精确含义以及一条完整的人工逃生通道改文本 → 导入 → 校验 → 导出 → 复查如何落地。背景为什么图语言还需要一份文本投影ZerolangZero把图当作程序数据库而不是把文本当作程序数据库。正如 docs/articles/concepts/graph-architecture.md 所描述的图直接保存声明、类型、调用、代码块、导入、能力与源码映射事实agent 用受检的图补丁graph patch编辑这些事实而人类在需要像源码一样的评审视图时才去读.0投影。投影projection在这一架构里的价值原文明确给出了三个理由信任trust人类可以直接阅读程序、评审一次改动、必要时手工编辑——即使整套工具链是面向 agent 设计的人也始终保有可读入口诊断diagnostics源码映射source map可以指向人类熟悉的行列跨度line/column span错误信息因此是人话边界清晰.0投影不是agent 的常规写入面。agent 的作者界面是图命令zero patch、zero query等文本只是投影。这个边界在 docs/articles/cli-reference.md 的命令分组里也有呼应file.0被归类为 Human-readable projection for formatting, import/export, and review workflows. It is not the normal compiler input.而inspect含status、validate含verify-projection、projection review含export、import、view、diff分别承担不同的职责。显式同步模型四个命令零隐式漂移Zero 用显式命令保证图与投影状态不会悄悄分道扬镳核心命令集如下zero export zero import zero verify-projection zero status命令写入语义何时使用zero export是从zero.graph仓库图生成/刷新人类可读的.0源投影文件人类需要最新.0评审文本例如zero patch之后zero import是从投影文本重建/刷新图仓库zero.graph人类有意编辑了投影文本要把改动灌回图zero verify-projection否无写入的漂移检查评审或 CI 中只想要读一遍不动文件的检查zero status否报告投影状态clean / missing / stale / conflict / unavailable先看清当前状态再决定用 import 还是 export原文给了一段 Agent 对话示例展示导出 校验的评审闭环{ messages: [ { role: user, text: show me the projection so i can review it }, { role: assistant, text: I’ll export the current projection and verify it is in sync. }, { role: tools, calls: [ { command: zero export, output: repository graph export ok\nwrote: ./src/main.0 }, { command: zero verify-projection, output: repository graph verify-projection ok } ] } ] }注意两个细节它们来自 CLI 契约实现native/zero-c/src/program_graph_command.czero verify-projection是纯读检查不支持--outverify-projection is a no-write check; remove --outzero export写入固定的源投影路径也不支持--outexport writes fixed source projection paths and does not support --outzero status同样不写文件报告在 stdout 上。也就是说这三个命令的写入面是刻意收窄的status/verify-projection永远不动磁盘export只写约定的.0路径。无静默漂移三种漂移、两种诊断、一种环境变量zero status是判断漂移的第一入口。从源码看native/zero-c/src/program_graph_repository.c投影状态机的合法取值是store-missingzero.graph不存在store-invalidzero.graph存在但无法解析为有效仓库图clean磁盘上的.0投影与图仓库投影表完全一致source-missingzero.graph里登记的投影源文件缺失source-stale.0源在zero.graph写入之后被编辑过源比图新conflict图与源被独立编辑双方都动了。这与原文clean / missing / stale / conflicting / unavailable的口径一致只是源码把每个词拆分得更精确conflict还覆盖模块身份与 target main 不匹配的情形。JSON 输出中的possibleProjectionStates数组也印证了这一点program_graph_repository.c。当状态不是clean时消费图的命令按以下规则行动源较新source-stalezero check、zero build、zero run、zero test、zero query、zero view、zero diff等命令会先从编辑过的源刷新仓库图并在 stderr 上报刷新动作。图较新store-newer例如刚执行zero patch之后这些命令继续使用zero.graph直到zero export把投影同步过去并在 stderr 上说明这一点。双方独立编辑diverged命令直接失败抛出RGP006诊断把zero import和zero export同时列为修复命令而不是自作主张地替用户选一边。ZERO_STALEfail把第 1 种自动刷新变成硬错误抛出RGP008诊断。内容判定而非时间戳判定哪一边动了不是看文件 mtime而是看内容每次写仓库图zero import、zero patch、zero export、zero init时都会把当时磁盘源投影的哈希记录进zero.graphsource_projection_hash。因此一个刚 staged、clone 或解压的工作区在任何机器上都会得到一致的分类结果——这正是无静默漂移能成立的基础。判定算法的核心在 native/zero-c/src/program_graph_projection.c其注释精确刻画了四种情形磁盘投影与图仓库投影表一致 →clean磁盘投影仍等于记录的哈希 → 只有图动了patch 落在记录之后图权威图仓库投影表仍等于记录的哈希 → 只有源动了源权威图需要刷新两者都不等于记录 → 源与图被独立编辑判为diverged。代码注释还特别说明了一个降级策略在source_projection_hash机制引入之前写入的旧仓库会退化为一次协调式源刷新而不是错误墙保证旧工作区不会莫名卡死。刷新与报错的具体实现命令入口处的同步决议逻辑位于 native/zero-c/src/main.c 的resolve_manifest_graph_input_syncCLEAN→ 直接继续STORE_NEWER→ stderr 提示 using zero.graph, which is newer than the .0 source projection; run zero export to sync sources or zero import to make the edited source authoritative然后继续DIVERGED→ 走z_repository_graph_diverged_compiler_input_error报RGP006读取ZERO_STALE环境变量若为fail→ 走z_repository_graph_stale_compiler_input_error报RGP008否则自动从源重建图刷新成功后 stderr 提示 refreshed zero.graph from the edited package source projection; tip: ...。两个错误诊断的完整措辞在 native/zero-c/src/program_graph_repository_input.c 中RGP006divergedexpected 是checked-in .0 source text matching zero.graph projectionactual 是source projection and zero.graph edited independentlyhelp 是run zero status to inspect the drift, then run zero import if the .0 projection is authoritative or zero export if zero.graph is authoritativeRGP008stale ZERO_STALEfailhelp 是run zero import to refresh zero.graph from the edited source, or unset ZERO_STALEfail to let this command refresh automatically。此外status、verify-projection、import、export各自还会在缺图、坏图、投影缺失、导入/导出后仍不干净等情形下报RGP001/RGP003/RGP006/RGP007参见 program_graph_repository.c 与 L507-L516。这条规则防住的最糟歧义原文点出了设计动机中最关键的一条一个 agent 编辑了文本看到zero check通过然后运行的二进制却是从另一份代码构建出来的。自动刷新 stderr 提示 ZERO_STALEfail硬失败的三级策略就是为杜绝这类检查过的代码 ≠ 运行的代码的幽灵。人工逃生通道改文本、灌回图、再验证尽管图是头等公民逃生通道是刻意保留的项目必须能随时从文本投影重建。一个人类可以编辑src/main.0把它协调回图并确认投影仍然匹配完整链路如下原文流程图{ type: flow, title: Human escape hatch: edit text, reconcile to the graph, nodes: [ { id: n1, label: human reviews src/main.0, x: 0, y: 0, tone: human }, { id: n2, label: human edits src/main.0, x: 0, y: 96, tone: human }, { id: n3, label: zero import, x: 0, y: 192, tone: compiler }, { id: n4, label: zero check, x: 0, y: 288, tone: compiler }, { id: n5, label: zero export, x: 0, y: 384, tone: graph }, { id: n6, label: zero verify-projection, x: 0, y: 480, tone: compiler } ], edges: [ { source: n1, target: n2 }, { source: n2, target: n3 }, { source: n3, target: n4 }, { source: n4, target: n5 }, { source: n5, target: n6 } ] }即human reviews src/main.0 → human edits src/main.0 → zero import → zero check → zero export → zero verify-projection。这一步一阶一阶走下来import把手工改动的文本确定为权威并重建zero.graphcheck验证图语义有效export把图投影写回文本若导入时文本与图有任何规范化差异这里会把差异收敛掉最后verify-projection以无写入的方式确认文本 ↔ 图已对齐。这让整个系统保持可审计图是头等公民但人类不会被锁在可读格式之外。评审规则Review RuleUse graph commands for authoring. Use projections for review. Import projections only when a human intentionally edits them.一句话概括 Zero 的投影哲学写代码用图命令读代码用投影导入投影只发生在人类有意编辑它的时刻。反过来说agent 不应该把.0文本当作常规编辑对象——那样会退回到改文本再靠 check 兜底的传统循环丢掉图补丁的结构化编辑优势。源码与测试对照这套机制如何被验证一致性测试conformanceconformance/run.mjs 覆盖了本条机制的端到端行为几个关键断言值得对照原文阅读source-free 校验L4053-L4062只有zero.graph、没有.0投影时verify-projection失败且diagnostics[0].code RGP006、actual missing source projection file修复命令里包含zero export执行export后changedPaths写出的正是hello.0再verify-projection得到projectionValidity: clean。authoring 全链路L4087-L4129zero init后投影未物化sourceProjection.materialized: false→patch后状态仍source-missing→verify-projection报RGP006→export后状态clean并写出src/main.0→人为编辑src/main.0后status变source-stale→import后回到clean→check/run通过输出正是改后的 human edit ok。冲突状态L4300-L4301人为把文本格式的zero.graph投影段改成非法内容后status返回projectionState: conflict。漂移检测L4331-L4333复制一份图、再改hello.0制造独立编辑verify-projection立即报RGP006。CI 无写入检查scripts/repository-graph-verify-projection.mts 是一个面向整个仓库的批量检查脚本遍历包根下的zero.graph逐个执行zero verify-projection [--target ...]任何 store 检查失败都让脚本非零退出。这正是review or CI 时做 no-write drift check的标准落地形态。文档与技能数据docs/articles/cli-reference.md 复述了 export/import/verify-projection 的用法分组skill-data/graph.md 与 skill-data/builds.md 把同样的同步规则写进了给 agent 的技能提示正常编译命令从zero.graph出发.0被编辑时先刷新并 stderr 注明ZERO_STALEfail则报错RGP006提供 import/export 双修复RGP008提示 import 或取消环境变量。实战速查遇到投影状态该怎么处理现象zero status状态处理方式刚 clone 的仓库只有zero.graph没有.0source-missing需要评审文本就zero exportzero patch之后source-stale图更权威的中间态命令会 stderr 提示需要给人看就zero export同步投影人手工改了src/main.0source-stale源更权威zero import灌回图再check验证人和 agent 各自改了源与图冲突RGP006先zero status看清漂移再按权威方选zero import或zero export自动化流程拒绝隐式刷新—ZERO_STALEfail显式zero import后重跑或取消环境变量小结Zerolang 的投影机制把图数据库与人类可读文本之间的一对多关系管理成了纪律.0文件永远只是投影图的作者是 agent 与zero patch文本的读者是人类评审者两者之间的每一次流转都必须经由export/import/verify-projection/status中的显式命令漂移方向由内容哈希判定而非时间戳冲突时抛RGP006把选择权交还用户需要严格模式时用ZERO_STALEfail把隐式刷新升级为RGP008硬错误。理解这套模型是安全地在 Zero 项目里混用 agent 图编辑与人工文本评审的前提。赞分享【免费下载链接】zerolangThe Programming Language for Agents项目地址https://gitcode.com/gh_mirrors/zero54/zerolang点击查看免费下载相关推荐Readest Book Config JSON 详解逐书配置文件结构与云同步投影机制Readest Book Config JSON 详解逐书配置文件结构与云同步投影机制 本篇技术指南围绕 Readest 阅读器中每本书独立的配置文件 Boo桌面应用跨平台前端OpenMVG 相机模型模块详解针孔投影、畸变模型与球面相机OpenMVG 相机模型模块详解针孔投影、畸变模型与球面相机 本指南以 OpenMVG 官方文档 cameras 模块说明 https://link.gitc计算机视觉科研LangGraph 有状态智能体编排从零到上线的实用指南LangGraph 有状态智能体编排从零到上线的实用指南 写长时运行的 AI 智能体你多半会撞上三个坑状态一断就丢、流程写成 spaghetti、崩掉之后人工智能AI AgentAgent 框架流程编排后端上一篇Equalizer APO 系统级均衡器入门从一条配置命令到全机声音焕新下一篇从零搭建免费游戏串流服务器Sunshine 完整部署指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考