**产品与宿主测试登记同时变更:**instructions 的同步事务使用现有目录租约所有者新增的局部租约,调用进程正常返回时释放排他;它不向子进程转交。原有跨后代租约仍以最后一个描述符关闭为释放条件。runner 的同源状态判断与独立 Verus 预期覆盖局部/转交、原进程/其他进程四种组合;Rust 回归在真实 fork 仍持有描述符时验证下一次同宿主调用,并保留原同宿主排除及独立宿主进展断言。此前观察到的 busy 失败原件继续保留,候选是否修复须由正式检查确认。
runner 的 Git 输入、快照、checkout、协议和保留使用方,以及 release 的执行、frontend 和 cache staging 使用方,在命令边界采用同一个 Rust fixture。它只提供这些测试实际使用的对象、索引、快照和有界命令接口;未知命令失败,不解析或转交宿主 Git。原批量读取、二进制字节、失败、超时、复用、消费者保管和独立性断言保留。需要 legacy PATH 的 runner 用例在各自子进程绑定私有 fixture,不修改父套件环境,也不串行套件。接口原值样本单独登记,原未过滤操作、线程和限制不变;真实生产验收仍走已登记 bootstrap/canonical 入口。新增进程、fixture IO、验证及存储成本尚未实测,这些 mock 不证明真实 Git 行为或其余选中测试所有者已完成 §2.2 迁移。
指令终结失败和新别名回滚不完整的恢复用例复用现有 Rust 子进程隔离,避免其他 libtest 线程的 fork 暂时继承该用例的元数据凭据;五个原终结失败点、同一尝试恢复、别名清理及不重新派发的断言保留。原 busy 失败只证明当时未取得锁,不能单独确定历史持有者。
workflow 分支用例复用同一私有子进程绑定。共享 projects 测试宿主将选定的 PATH 显式交给清空环境的判官;inputs 的完整输入关系同步声明该值。Git fixture 按实际调用保留 amend 的原父提交,并让普通提交遍历、计数和父提交输出共同遵守浅历史边界。registration 的固定宿主登记样本单独保存在已登记的 JSON 数据中,不在测试时读取源码检出的历史 Git。普通 diff 的命令替身按明确 text 属性转换 CRLF,并采用 core.symlinks=false;raw checkout 仍核原字节和类型。depth fetch 仅取得所选提交及有限祖先,保留边界提交的原父头和此前已取得的对象;原 acquisition 必须实际 fetch 缺失输入。
fetch 的有限对象导入按对象身份去重,只复制本地缺失对象;同一路径、跨路径和跨提交共享的对象不重复写入,已有不可变对象保持原字节和修改时间。提交、父关系、引用和浅边界仍按原所选历史更新。Rust 命令边界回归先在旧实现观察重写失败,再核补齐历史、已有对象保留、原内容和错误引用拒绝;全部登记使用方继续执行原未过滤操作、线程与期限。这项修复消除已证实的重复 IO,不证明历史发布超时的完整原因或实际节省量;原生发布另行验收。
执行检查分工明确:registration 解释登记,FILEMAP 决定影响范围,routes 制定计划并核对工具,projects 执行操作、核对原始回执。它们共用已有执行器,不从目录、语言、Cargo 依赖或运行时扫描补出依赖。
FILEMAP v2 的 execution_plans 是从 test:ID 到 {operations: [operation-ID, ...], timeout_seconds, output_limit_bytes} 的映射。操作序列必须非空、有序、无重复,且包含唯一的测试执行方法;只有列出的操作才算前置。action、工具和原始参数仍归 projects/scripts。
可选 operation_bounds 为序列中具名操作提供完整 {timeout_seconds, output_limit_bytes}。没有覆盖项时继承计划默认值;映射省略或为空时,序列化计划身份保持原样。未知操作、缺少限制字段、非正上限或超过 64 MiB 的输出限制都会被拒绝。限制按计划明确登记,不按操作名称特判。
routes 把所选序列合成先后关系,共享操作只运行一次。在观察工具或启动操作前,先拒绝环和共享限制冲突。每个输出流最多 64 MiB;超时算基础设施失败,不能当作功能结果。同一共享操作在所有选中计划中必须有完全相同的最终限制,一方写了覆盖项不能替另一方解决冲突,也不取最大或最小值。
新增、修改、删除覆盖项都参与完整及按范围检查的变更影响。汇总只重建登记覆盖与最终限制,不执行业务操作。当前协调仓库启动行为证据由 test.host-bootstrap-native-tests 的现役 FILEMAP 计划提供;distribution 与 release 集成计划仍用 600 秒默认值。旧完整宿主迁移计划已移除。执行计划通过不证明公开发布、真实 CI 验收或全面采用完整检查。
FILEMAP v2 可登记一份 execution_scheduling:
{
"max_running": 2,
"priority": ["build.example", "test.example"],
"resources": ["shared-inventory"],
"claims": {
"build.example": {"resources": [], "outputs": ["example/output/"]},
"test.example": {"resources": ["shared-inventory"], "outputs": ["example/output/"]}
}
}max_running 是正的有限操作并发上限,与 CPU 数量和工具内部线程数无关。所有登记计划中的每个操作恰好有一条占用声明,资源和输出为空也要明确列空数组。计划外的真实生产操作也可保留声明,无须为此加入测试计划;它同样必须有唯一方法、合法资源和精确登记的产物。声明本身不选中或启动操作。资源名只能来自 resources;输出必须是现有 config.artifacts 的精确路径,旧按范围适配器使用其明确登记的产物路径。
声明缺失、未知、重复、歧义或无效时,在业务工具观察或启动前失败。不扫描语言、目录、调用图或测试。所有资源都独占,相同或嵌套的输出目录冲突;声明是否完整仍由登记者负责。
本仓不再声明整套测试共用的 coordinator-fixture-producers 占用。保留样本登记和修改排除归各次分配,独立生产者/报告处理会释放协调仓库的进入锁,单个套件不再全程占用每个样本存储。workflow/worktree 较窄的清单占用及精确输出占用仍保留。并发上限仍为二,内部测试线程、断言、租约期限和操作限制不变。
这次产品所有权与宿主调度政策一起修改,仍须标准变更和真实 CI 检查验证新的并发关系。协调登记和最终输出保留也已逐项存储;普通操作只访问目标及明确依赖。总耗时、存储和 CI 成本未知。原登记租约失败继续保留,尚未证明历史持锁者是谁。
priority 可选,按顺序列不同的已登记操作 ID。已就绪的列出操作先于未列出操作;未列出操作保持标准计划顺序。空或省略时保留原序列化身份和顺序。完整政策可以列当前单元未选操作,但优先级不选中操作,也不推断耗时或依赖。未知、空或重复 ID 在业务操作前失败。
只有 projects 调度 routes 的有向无环图。它按登记优先级、再按标准计划顺序选就绪操作;跳过冲突以便独立操作继续,启动前一次取得全部占用。前置仍在运行时等待,前置最终失败时只阻断其后续依赖。共享操作每次选中调用只跑一次。所有自有工作者都须等待结束,报告的执行/阻断记录保持标准顺序,不随完成先后变化。
调度器行为测试复用现有诊断日志,记录工作者派发、实际启动、等待、回收及输出流加入的时间线。每次执行最多保留两个 1 MiB 日志文件;成功时自动回收,失败时与原计划、结果一起放在 .chrono-harness/state/test-failures/,供失败诊断和 CI 原件上传使用。时间线只记录实际事件,不推断完成通知丢失的原因。
执行状态与所选报告由同一负责方确定地址。routes 将报告位置和本次运行身份绑定为 operation_state;projects 在派发前独占创建该地址、保存原计划和 intent。每项操作分别保存 intent、真实启动身份及有界原 stdout/stderr,返回后立即写入独立的无损结果;不等整轮结束,也不共用一个写入锁。已占用的执行身份拒绝重复派发,原件不足仍保留 unknown。
整轮返回时,operation_state 引用汇总原件,逐项列出独立结果的路径与摘要。它只说明调度器已经加入工作者;每项实际退出是否已知仍单独记录。采用 retention 的宿主沿现有 check-original 负责方保护未完成记录,已确认结果按现有有限诊断保留期退出;外层报告声明对执行原件的依赖。无损结果封存并接收原字节后,临时实时流交给同一所有者回收。没有结果的中断记录继续保护,不因清理或 PID 消失宣称完成。当前实现尚未提供自动收取已失去原等待通道的进程终态,不能据此声称 SPEC §§7.4–7.5 已全部完成。
原退出码、输出字节、超时和回执错误保持失败。未采用调度政策时串行执行,计划及身份保留旧格式;采用后完整声明进入计划身份,汇总从保留的候选登记重建并比较,不运行业务或版本命令。
并发上限、资源和优先级变化都会影响登记计划消费者。优先级顺序有实际含义,变化或移除须覆盖两端消费者;占用变化还影响两端明确冲突的消费者。输出声明变化保留明确消费者和负责人。移除或重新分配沿用两端记录与边的并集,不能为并发而删除必需检查。
按范围 CI 与完整影响分析都将有效优先级顺序纳入全局调度变化比较。新增、删除或重排优先级时,选中两端已登记的完整计划;顺序不变时不因此新增执行。本批同时修正产品选测和宿主长链优先级,原并发、占用、测试和期限保留;新增回归覆盖变更与不变边界,实际成本仍须分别测量。
Unix 进程记录可选 ownership_fds,保存执行器实际传递的使用凭据。environment 和 environment_digest 只描述业务输入,不包括保留变量 CHRONO_PROCESS_FDS。该变量由进程引擎根据实际继承/当前范围内的描述符设置,调用方不能用显式值替换。回执单独保留载体,避免把描述符分配当成业务环境漂移;没有载体时省略字段,原有记录仍可读取。
执行计划的业务工具绑定也排除这个变量。Rust 原生 CI 输入准备通过同一进程引擎转交继承描述符。Rust bootstrap 和真实外部接口消费者仍须按登记方法转交同一描述符;只转环境变量不能维持内核锁。
引擎不修改已继承描述符及其标志,其他线程和后续原生子进程继续保留原凭据。引擎自己复制的描述符在子进程启动前保持 CLOEXEC;最后一个继承或自有描述符关闭时才释放内核租约。
macOS 上,固定 Rust 1.95 的标准库先创建 pipe,再设置 CLOEXEC;并发 fork 可能在两步之间继承另一操作的输出写端,使已经退出的操作仍收不到 EOF。引擎仅串行化自身的 Command::spawn 调用,启动返回后立即释放锁;子进程运行、输出读取、调度并发和原超时继续独立。该边界不覆盖绕过引擎的原生启动,也不提供跨进程锁。现有 projects 的依赖/冲突/独立操作回归保留原握手、断言、线程和时限;原失败时间线继续作为诊断依据,不能由一次通过证明没有其他描述符问题。完整启动延迟和验证成本未测。
能力载体避开描述符 255:Bash 3.2 读取脚本时会直接占用该位置,不检查已有描述符。复制器临时持有该槽位后另取副本,保留原生描述符耗尽错误,不关闭调用方的原凭据。发布启动器回归在独立 Rust 测试进程中携带一组高编号能力,验证真实 shell→Rust 交接。
Unix 引擎通过继承描述符 198/199/200 传递有上限的匿名启动树登记,不改变观察到的参数和业务环境。每次已知嵌套启动在 exec 前,把子进程和启动器的活跃身份交给首个引擎拥有并负责等待的唯一观察线程。macOS 使用内核退出与回收事件(NOTE_EXIT/NOTE_REAP),Linux 使用 pidfd 的退出与回收通知(POLLIN/POLLHUP),要求内核支持。退出和回收分别记录:直接启动器仍须真实等待自己的子进程;启动器已中断时,存活所有者须等登记的子进程回收后才能释放登记。
首次识别继承通道时,描述符 198 若带 CLOEXEC,则属于当前进程在 exec 后打开的资源,不作为继承树读取;父进程的该描述符及标志保持原样。未带该标志的通道仍须通过原字节、上下文和观察者校验,碰撞继续失败。独立子进程回归覆盖首次调用前占用该编号的本地 socket,以及无效继承 socket 的拒绝。
启动器被中断后无法运行析构。存活所有者只有取得两个精确身份的内核终态、并确认登记子树完成后,才可协调这次启动。PID 消失、发出 kill 或外层成功退出,都不能代替完成。启动代次避免延迟事件或旧继承上下文误用已复用位置。macOS 已有原生行为测试,Linux pidfd 仍需真实平台验证。
观察线程记录实际收到子进程内核退出事件的时间,时钟与 Instant 相同:Apple 使用 CLOCK_UPTIME_RAW,其他平台使用 CLOCK_MONOTONIC。监控器在启动原执行计时前固定证据截止时间。恢复执行时若已过期限,只有严格早于截止点的退出观察才允许立即探测一次子进程状态;实际已结束才保留子进程结果。观察缺失/过晚、时钟失败或探测仍未完成,一律超时,不再追加等待。
时间戳只说明退出不晚于观察时刻;观察线程自己延迟时,不能反推更早退出。取消、输出限制和所有权清理仍独立检查。私有映射身份区分布局版本,耦合的嵌套二进制须一起升级;继承所有者不兼容时失败,不能静默按新布局解释旧共享内存。
macOS/Linux 监控器阻塞在已有私有通知 socket 上,等待退出、等待完成、输出流、生命周期提示,或剩余执行期限。若及时收到内核退出观察、但期限内 Child::try_wait 仍未就绪,直接所有者把同一个 Child 交给唯一原生阻塞 Child::wait 线程。线程先发布实际状态或等待错误,再通知原 socket,无需额外提示或周期探测。期限后不启动等待线程。
监控器继续执行取消、输出和原期限限制;清理或栈展开时按需终止自有子进程,并在返回前等待线程结束。受控顺序回归使用真实内核退出事件、一次故意未就绪的探测,之后不再发送提示,要求得到真实结束状态和原输出。这只证明该状态转换,不证明某次真实 CI 超时的原因;新增等待线程成本未测。
唯一退出观察线程阻塞在登记的内核身份和现有启动登记 socket。取消、位置释放、观察器停止都通知同一 socket;已完成后代的移除在本轮事件处理内结束,再次进入阻塞。通知不代替真实子进程等待,也不证明成功。私有映射 v6 同时要求这些生命周期提示和独立回收标记,耦合嵌套程序须用同版本。
生命周期和身份事件通知保留的启动端点,共享观察器因此可以在真实树事件发生时唤醒兄弟监控器,不定期探测状态。这也覆盖排空条件里的进行中预留和明确后代。停止句柄共享已有描述符,不增加描述符预算,也不新增守护进程、轮询通道或执行时间。
监控失败时,在清理改变状态前一次保留启动身份、终止/取消标记、观察时间、父标记、有限位置数,以及实际/允许监控毫秒数。这些是分别读取的原子值,不是整树一致快照,也不作因果判断。它们可区分缺少退出观察与其他完成失败,无需探测进程、增加任务或改期限。
同一失败观察还保存启动树全部占用位置:位置/代次、父位置、记录 PID、终止、启动器终止和取消标记。最多 4096 个位置,只在清理前采集一次,不发现新进程,也不从 PID 猜存活。嵌套超时回归先核对保留的实际子进程身份和父子关系,再核对最终清理。
completion_wait_blocks_without_periodic_status_probes 在原生子进程中隔离一个引擎,真实业务子进程关闭两个输出流后等待 1500 ms,再退出 7。从启动后、关闭输出流的 socket 握手起,到引擎及观察器/读取线程真正结束,通过已有 retention-test 特性统计实际 DirectChild::probe 调用,要求大于零且少于 64。子进程只在统计窗口开启后开始原延迟。哈希、加载和所有权准备都在窗口前,握手使用阻塞 socket;系统上下文切换不再作为探测次数的代理。计数及读取只编译到测试特性,不增加生产路径状态、依赖、进程或 IO。
有限事件余量容纳 EOF/退出/加入通知,1500 ms 内的 2 ms/10 ms 周期探测应超过上限;变异验证须实际观察到失败。这项有限静默等待回归不证明全部任务所有权或宿主通知。已有超时、输出限制、挂起监控器、中断启动器、嵌套取消和描述符耗尽测试保留原义务;外部调用方句柄、通道丢失恢复和宿主完成通道仍按 SPEC §7.4 由调用方/宿主负责。
一次操作超时只取消自己的启动子树。嵌套引擎先终止进程组并回收子进程,外层再等待自己的子进程和输出线程。原执行期限后仍只有一秒清理余量;到余量中点仍未确认后代完成时,终止已登记的启动组,包括尚未退出的直接启动器,让被暂停的启动器所拥有的子进程能够被接管回收。剩余时间继续等待精确退出与回收通知,不能在发出 kill 后直接视作完成。即使最终完成,强制清理仍算失败;未知或不响应的完成也失败。执行上限不增加。
最多同时登记 4096 次启动;位置或内核描述符耗尽、描述符冲突、无法交接活跃身份,都在 exec 前明确失败。原生工具的普通后代留在启动组内;包装器若关闭继承描述符,就无法传递嵌套 runner 所有权。非 Unix 仍只清理直接子进程。不提供进程扫描、守护进程、任意未声明写入者保证或跨调用锁;调用方继续使用独立工作树及既有生命周期边界。
活跃身份登记失败时返回观察器实际内核 errno。子进程以有界、检查过的写入,在私有上下文描述符中发布固定的阶段/原因/errno。exec 前错误路径只用栈记录和原 OS 错误;父进程仅在启动失败后构造诊断文字。诊断缺失或不全不替代 errno,没有 OS errno 的所有者失败用 EINVAL。启动失败没有已执行进程回执,诊断不能编造退出或完成。
一秒交接/清理余量及执行期限不变。发送循环在同一交接余量内重试 EAGAIN、EINTR、ENOBUFS,耗尽后保留最后发送 errno。父诊断区分确认轮询超时与短读取。Linux pidfd 系统调用使用已有的明确 libc::pid_t ABI;编译成功不代表 Linux 运行行为已验证。
registration 严格解释登记,FILEMAP 负责记录身份、目标和影响。计划变化指向测试和列出操作的定义记录。operations、argv、version_argv 保留顺序。tool:ID、environment:NAME 与 input:ID 一样,须有明确消费者边。只有走过 test-execution 才选完整规则测试;测试别名成为起点本身不选执行。构建/运行输入可以指向脚本或项目;Cargo 依赖、所有权关系或目录不自动产生边。
完整 FILEMAP 求值还比较两端经 registration 验证的保留实际环境。缺失/null 与空字符串不同,配置值先覆盖继承值再比较。变化只以已有 environment:NAME 为起点,沿两端明确边的并集传播,包括仅旧端存在的边。无连接或值未变时不选消费者。快照键未登记或实际事实矛盾时失败。produce 仍只读声明;produce_with_inputs 另读取已验证保留事实,两者共用记录比较、图传播和历史解释。
完整进程链是 registration → filemap → routes → projects。registration 发布绑定固定端点、登记摘要和上下文的不可变解释结果;filemap、routes 转交它,不重新加载未转换的历史登记。routes 核对 runner 在解析前采集的入口参数和 cwd。不同 cwd 下等价的绝对引用可接受,参数顺序、字面值和固定端点仍须符合登记方法。只展开整个参数恰好为 {base}/{candidate} 的项。
routes 输出 chrono-execution-plan/v1,绑定端点、登记、上下文、实际输入、观察到的调用和运行身份。每个选中工具只在声明环境中解析一次,保留绝对调用路径和 basename,实际观察文件字节、版本 stdout 和退出码。预期版本必须等于去掉末尾空白的实际 stdout。迁移的前次观察须验证后才能复用;每次启动前重核工具字节,不使用未登记 PATH 回退。
runner 进程引擎记录实际参数、标准 cwd、有效环境及摘要、stdin 摘要、可执行身份、原始 stdout/stderr 字节及摘要、退出和资源失败。两种检查协议都严格按 UTF-8/JSON 解码原 stdout;有损显示字符串只作诊断,任意操作字节仍保留。projects 据此生成回执。routes 比较回执/计划/方法/运行身份、参数、cwd、工具、输入/环境身份和输出摘要。
证明 action 可明确声明 output_contract: {"version":"固定 Verus 版本","commit":"完整 Verus commit"}。
该合同进入真实 Method、计划及回执身份,单独变更它也会进入两端操作比较。
routes 核完原回执后,由同源 Verus 判断同一原进程的参数、退出及一次解码的报告;
必须是完整 crate、非零 verified、零错误且版本/commit 精确匹配,才准入证明结果。
普通 action 不解析其业务 stdout;缺失或 null 合同表示普通操作,不按名称推断。
本地执行和离线 collection 共用这一比较,具体条件和明确外部解码合同见 Verus 实施范围。
采用新合同数据前,先通过现有 bootstrap 部署能读取该字段的生命周期所有者;旧严格读取器会在构建前拒绝。
回执缺失或矛盾会失败;核回执不能把非零退出、输出超限或超时变成成功。失败后独立分支可以继续,依赖操作标为阻断。已选、已执行、被阻断、已移除和替代义务分别记录。操作前后都检查候选未提交改动。
Unix 信号终止在 failure 中记录信号号和子 PID,保留旧 exit_code: -1 及原输出。准备后和显式旧入口的失败报告保留实际启动进程。传输先报告进程失败,再尝试解码响应 JSON。普通数字退出不变;引擎取消、超时、输出超限保留原因,不能被清理信号重新分类。信号观察不说明谁发送或为何发送。
projects 核对受影响项目/测试、脚本/测试是否互相且独占配对、是否明确登记执行边、文件归属,以及生成目录隔离。生产项目须有登记文件和一个专属测试;脚本保留明确路径及配对。不要求 manifest、锁文件、源码根或生成输出。可选旧 manifest/lockfile 只是归该项目所有的普通引用,root 不推断语言或输出。不同所有者共享或嵌套输出会失败,登记输入不能位于生成输出排除目录内。产物记录变化也指向两端明确负责人,不能只改输出就变成无工作。
action 名可为任意明确非空值,每项绑定全局唯一操作;测试 execute 仍是执行入口,FILEMAP 计划提供有序前置。manifest、扩展名、import 或目录发现都不改变归属、依赖和选测。
本仓测试项目由实际 cargo test 操作编译并执行,不另外登记没有当前调用方的 cargo check 或 cargo build --tests。生产构建、原行为测试、格式操作和同源 Verus 证明各保留其实际入口。缓存登记中的 check.* 是缓存 ID,生产者仍明确绑定 build/test 操作,不能把同名缓存误当成 Cargo check 的调用方。
routes 专属测试直接编译真实库和自己的 Rust 工具,不读取生产二进制,因此自己的计划和单元缓存只消费测试 target。其他测试计划仍实际调用 routes 二进制,保留其 build.judge-routes、共享缓存及调度声明。
cache 专属测试同样将生产 main.rs 编译为 chrono-cache-test-cli,CLI 调用和 planner 路径/摘要/长度绑定一起迁移。自己的计划只保留原证明、格式检查及未过滤测试,不再另构建或缓存生产 target。native 发布测试仍消费生产 cache,生产 claim 保留,完整成本收益未测。
runner 专属测试通过 Cargo 将生产 main.rs 编译为 chrono-harness-test-cli,CLI 合同和日志测试直接调用这份执行物。自己的计划和单元缓存不再消费 build.runner 或生产 target;其他现役测试、bootstrap 和发布打包仍使用原生产构建。原测试、断言、线程、时限和开发优化配置保留,完整成本收益未测。
CI 专属测试统一复用已有 chrono-ci-test-cli,由 Cargo 从生产 main.rs 编译;完整上下文、发布和宿主工具安装测试也使用这份执行物。自己的计划及单元缓存移除 build.ci 和生产 target,原未过滤操作、断言、开发配置和期限保留。其它实际使用方及正式发布仍消费生产构建;完整成本收益未测。
只登记自身、未接入计划或操作说明的临时过滤测试动作已经移除;测试本体继续由原未过滤操作或现役分组执行。macOS 27 政策也不再单独登记没有 action、输入绑定或 FILEMAP 使用方的 linker 工具;真实编译归原 Cargo 操作。
语言检查由宿主明确采用的工具承担,操作、政策输入和依赖边均须登记。通用样本覆盖无 manifest 项目、普通旧文件、自定义 action 和任意位置。真实 Go/TS/mix 声明可由通用格式和配对消费者接受,但这不证明 SDK 输入完整或全面启用检查。
context 可以指向根目录相对的 retained_inputs JSON 文件。base 和 candidate 各含 commit、environment、files。继承环境变量映射到字符串(可为空)或表示缺失的 null。每个 files[ID] 要么含字节数组 bytes,要么精确为引用保留状态内容的 {blob, sha256, length}。输入快照工具可采集并传输,不必内嵌大文件。runner 传递快照元数据。
普通完整检查核验两端每个已声明外部文件的保留摘要及当前候选磁盘字节;完整单元检查按 registration/input 的明确前置范围投影,包括共享和检查规则输入,不要求无关实时 SDK 文件。汇总核验原 blob 和各原单元输入投影,不读取当前业务输入。全局结构/引用校验仍保留,传入未知或畸形输入仍失败。
registration 比较候选环境和 runner 观察,不从当前磁盘重建旧字节。报告发布输入身份与长度,快照仍作证据。解释器、委托工具链、配置和样本字节须登记为实际输入;声明和哈希不能证明没有未披露输入。本仓仍为 proposed,且明确输入不完整。
完整登记可选择 execution_units:将每个候选执行计划恰好分配一次,列出重复共享操作,设置有限的清单/报告字节上限,并给各单元和完整汇总报告不同的状态路径。分配为空或未知、路径重叠、与标准报告位置冲突、限制无效时,registration 在业务启动前拒绝。分配和选操作的辅助逻辑与按范围入口共用;v1/v2 和不分单元的完整请求保留原协议格式与行为。
--unit ID 仍运行全部七个检查程序。routes 先验证全局变更选测、替代、前置和操作顺序,再只把该单元选中的完整计划交给 projects。集成和交付运行都核对单元本地回执及适用的上下文/分支要求;依赖整体完成的迁移、替代、移除和证明判断留到汇总。
报告记录 global_selected、own、assigned_elsewhere、required_units、not_required,以及从声明生成的全局图。完整报告和证明消费者拒绝把单元贡献报告当作整体完成。
所选报告保留一份封存的首个检查请求模板。runner 共用的 judge_request 根据模板、配置 DAG 和精确前置记录重建各原始 stdin,并核对实际摘要;前置观察不再内嵌请求。
当前准备流程明确选择 chrono-retained-process/v2:每条流保存 zlib 压缩十六进制、原长度和 SHA-256。有界解压器拒绝尾随、截断、损坏或相互冲突的流表示。原参数、cwd、run ID、回执身份、退出和错误不变,Git 观察使用同一编码。历史内嵌格式和 chrono-retained-process/v1 十六进制仍可读取;没有请求标记时保留历史完整内嵌/scoped v1 的 stdin 构造,不改原件。
完整分单元报告发布、projects 汇总/完成、汇总工作流证明,都把序列化元数据加 v2 原 stdout/stderr 长度计入已有 report_bytes。压缩不扩大原始流预算。历史内嵌/v1 仍按原序列化字节计费,之后仍核原字节与摘要。
显式 ProcessEvidence 消费者使用同一进程引擎,保留实际读到的字节和原子启动身份。外层终止后若没有结束证据,结果仍未知;启动记录发布成功不算成功回执。启动后的发布失败仍体现在真实 ProcessResult 中,保留已读有界字节、剩余流读取、退出码和身份。启动记录发布失败时,诊断保留原启动记录及两个 PID;启动前发布失败则不启动子进程。
需要实时输出的 Rust 使用方通过 ProcessForward 使用同一组有界原流读取器、进程所有权和期限。转发写入必须能返回;某条转发失败后保留原错误,停止该条转发,继续收取两条原流和真实子进程终态。回执另记实际 exit_signal 及两条流的完整性;超限截断或读取失败不能声明原流完整。此接口不另启等待器,也不扩大既有输出上限。
按范围检查的输出流发布错误携带 E_PROCESS_EVIDENCE JSON 诊断,包含无损进程信息及已成功保留的 stdout 引用;二次编码失败则回退到原内嵌回执。部分文件或发布失败不能成为成功报告。Git 事实明确按事实 v2区分版本;进程编码兼容不代表 v1 facts 请求兼容。参与检查失败时,准备状态保留原进程,报告返回地址/摘要,不同时嵌入两种流表示。这些是证据传输和保护要求,不代表 SPEC §10.1 自动移除已完成。
有地址的上下文、保留快照/blob 和引用证据,使用原逻辑键下的外部 chrono-retained-blob/v1 描述符 {schema, storage, sha256, length}。storage 明确指向所选上传根下的状态路径。暂存按有限缓冲计算摘要和复制,相同原字节去重;原 {sha256, length, hex} 内嵌格式仍可读取。
JSON 报告和进程流保持既有限制,外部业务 blob 不占内嵌十六进制预算。JSON/进程解析仍限 64 MiB,输入身份和传输验证则流式读取大文件。不可变运行记录保留早先尝试,登记单元路径标识新尝试。
这种可转移的完整依赖集合只用于单元和汇总。普通完整检查保留本地 blob 引用,由 registration 流式核对原身份和候选身份,允许输入大于可转移报告上限。畸形、缺失或改变的 blob 仍由输入模块在业务前拒绝;不分单元的报告不把这些文件内嵌为可转移字节。
汇总导入重新暂存每个声明的外部原件,保持单元报告字节不变。完成记录明确映射原存储地址到导入描述符,最终报告在汇总上传根下保留全部嵌套依赖;交付按绑定的传输解析。映射缺失、嵌套字节丢失、截断或身份冲突都会被拒绝。失败运行保留原失败,并在 artifact_failures、unresolved./artifacts 报告不可用原件。
runner 在组装完整报告前,独立核对执行循环返回的记录:
- 用另一遍拓扑遍历重建登记的绑定 DAG,核对各请求和 stdin 摘要。
- 按绑定核对可执行文件、argv、cwd 和环境回执,按实际退出核对响应身份、状态和问题列表。
- 被阻断记录须指出失败的已登记前置,或重现请求构造失败。
- 成功响应字节须匹配原进程 stdout;保留流的文本和摘要须匹配原字节。
- 若保留进程其实含有效协议响应,或进程失败证据不符,则拒绝传输失败记录。
- 启动前错误须有预期请求身份,且没有进程、响应、退出和 stdin 证据。
- 重新计算汇总状态。
任一矛盾都报 E_SELF_DIAGNOSTIC 并阻止发布。这只检查已声明输入的一致性,不发现依赖、不验证宿主输入完整,也不证明检查程序的业务结论正确。
--collect MANIFEST 使用同一七程序入口,读取有上限的 chrono-full-collection/v1 清单,每行含 unit、path、sha256。runner 和七程序身份来自当前绑定调用及候选登记。routes 只规划完整声明图,不观察业务工具,包括版本命令。
projects 对每个必需单元核验一次,也核验所有额外提供的非必需单元。它从原检查响应和成功进程推导成功/警告,核对 DAG/stdin 一致性,重建声明输入、入口、工具/版本要求、计划/顺序/前置/限制、义务分组和回执。保留回执还须满足每条输出流限制;回执自身摘要不足以替代这些比较。
原仓库根可以不可用,原证据只能来自明确声明和传来的字节。外部输入位置、环境含义和原进程坐标保持精确。runner 的 host-root 别名按保留的原调用及既有实时路径解析核对,汇总不重新打开或改写旧根。
历史转换在汇总时读取原解码器观察。当前 registration 比较固定原字节、候选解码器、声明工具/版本/输入和原成功进程,不启动解码器;每个提供单元的转换都要核对。声明的工具、输入、环境节点可通过明确 runtime-input/judge-trigger 边到达检查消费者。单元分配和共享操作变化,复用计划变化的同一登记目标。
projects 产生有类型的 chrono-collected-completion/v1,含与来源关联的覆盖情况,不伪造汇总器自己的业务执行记录。每份原报告按内容摘要保存。最终汇总报告包含原报告、全部有地址证据、清单和实际汇总进程。
workflow 对直接完成或验证后的汇总完成应用同一完整迁移/集成政策。交付核对真实最终 pass/warn 报告、实际 workflow 输出和原始来源依赖;临时、截断、失败或仅单元贡献证据都会被拒绝。单元/汇总路径不能与标准报告、配置的证明/上下文目的、保留输入产物或不可变证据重叠。报告和清单按登记上限执行,最多 64 MiB;过大就失败,不静默截断。
核心已提供明确单元执行和离线汇总;CI 模块通过明确 full-context/上传映射提供工作流生成和自动产物传输。完整宿主真实 CI 启用、bootstrap/输入齐全、provider 实际采用和公开发布仍待完成,不能由这些检查推导普遍同判或运行提速。
专属 workflow 消费者测试包含两组真实独立 Rust 生产/测试配对、共享前置、失败单元及选择性重试、原根和业务工具不可用时的离线汇总、含义变异、跨单元替代/迁移与联合移除、空汇总,以及汇总集成后交付。FILEMAP 和 runner 消费者也核对分配变更及完整报告入口拒绝贡献报告。
无父提交可在 .chrono-harness/ 下明确使用独立配置:
{
"schema": "chrono-initial-check/v1",
"host_config": ".chrono-harness/config.json",
"timeout_seconds": 30,
"stdout_limit_bytes": 1048576,
"judges": [{
"id": "initial-registration",
"executable": ".chrono-harness/bin/chrono-judge-registration",
"version": "0.1.0",
"sha256": "<已安装候选可执行文件的 SHA-256>",
"argv": ["--protocol", "chrono-initial-judge/v1"],
"selector": "every-initial",
"modes": ["inventory"],
"after": []
}]
}配置本身也要登记到 FILEMAP,提交完整初始清单,再与普通变更 profile 一起绑定到 schema4 的 canonical_check.initial_profile。独立 v4 provider 明确登记同一清单路径及生成配置。本地与 CI 采用同一入口:
.chrono-harness/bin/chrono-harness check登记的输入模块只依据真实 Git 拓扑或原生事件证据,为无父候选选择初始清单;非根提交仍走普通变更配置,须有登记基线。两配置路径和摘要、真实短入口、候选配置及生产原件继续绑定。缺少初始绑定就报错,不回退。空业务清单不需要单元;已有非空按范围单元初始化保留独立明确要求。旧登记保留原初始 CLI 要求,见独立首次采用。
初始配置拒绝 --base 和 --context。runner 读取实际提交头,非根提交不能因浅历史或 Git replacement 隐藏父提交而进入。共用不可变 Git 事实禁用替换对象,按范围 CI 和事件准备复用同一父提交读取器。
各检查程序使用完整宿主配置的明确环境,按既有 Git 环境身份排除 schema4 声明的仅获取阶段凭据。after 构成明确 DAG,前置失败只阻断依赖。路径、语言和检查 ID 不选择额外检查;原进程限制、字节摘要、严格 JSON、请求身份和状态/退出精确核对继续生效。参数可展开 {candidate},使用 {base} 则报错。
请求为 chrono-initial-judge/v1,模式 inventory,只有候选端,没有 base 或 DELTA。profile_sha256 绑定配置原字节;registry_digest 是五份候选登记路径到解析 JSON 值的 JCS 映射之 SHA-256。请求还绑定配置路径、工作树、实际 runner、观察和明确前置响应。响应字段沿用普通结构,但使用此协议身份;没有变更路径集合,所以问题引用必须是 JSON 指针。
默认 registration 初始检查核对 proposed 登记格式、全部当前引用和文件成员、实际配置/可执行绑定、固定候选字节,以及工作树干净状态,包括被忽略改动和不支持的索引标志。它在明确初始范围内复用普通规则,没有历史端点。默认拒绝 active/enabled 登记:之后启用仍须真实变更及既有准备/集成义务。
初始清单检查不执行项目测试、不证明配对含义或工具链/输入完整,也不替代另外六个检查程序。其他清单检查程序/脚本要明确绑定。
chrono-initial-report/v1 写 scope: initial-inventory、base: null、delta: null、previous_enforcement: none、governance: not-evaluated。status: complete 表示配置清单检查成功结束,退出 0;failed、error 保留非零。各响应保留 pass/warn/fail/error 和原进程回执。
报告按内容身份保留在所选真实 CI 上传根,本地则放 .chrono-harness/state/,最新副本为 initial-report.json。短控制台输出指向不可变原件,旧入口输出 JSON。不改登记状态或输入声明。完整 bootstrap 来源、启用、兼容公开安装和真实初始事件验收仍待完成;生成和本地/原生生产者样本测试不能证明完整同判。
本仓现役 workflow.json 的 historical_profiles 为空。旧 chrono-ci-check/v1 加 FILEMAP v1 宿主专用解码器、宿主/工具样本、对象获取辅助和迁移测试程序已退役,不再作为当前采用路径。当前 projects 验证使用原始未过滤专属 action;已退出支持的历史断言不构成保留义务。
通用转换接口供宿主按实际迁移需求显式登记,读取固定历史数据,不编造执行计划,也不执行历史判官。config 的两端明确存在/缺失声明见输入快照;projects 支持 v1/v2,judges 使用 v1。
workflow v3 使用明确的版本选择:from_versions 和 to_versions 各包含 config、filemap、projects、judges、workflow 五个正整数。前后映射必须不同,并精确匹配固定端点。其余字段为 id、script、test、mappings、legacy_records、ambiguities。workflow v2 的具名 FILEMAP profile 继续按其声明读取。匹配超过一个就失败,未匹配版本配置则不运行解码器;每个变化格式仍须当前迁移声明。只有实际数据转换才要求转换器及已执行测试;只更新当前规则时不写这两个字段,也不增加历史兼容义务。
选中的候选脚本接收 chrono-historical-decode/v2,含 config_path、original、original_bytes、candidate、profile,返回历史解释 values、保留旧定义 historical 及声明的 mappings。历史 config 必须仍等于原值,旧输入快照保留原格式与摘要。
该接口支持宿主登记的 v1→v2 config 转换/兼容检查,不给旧快照换标签,也不把未绑定的 v1 摘要当作缺失。运行时不替宿主生成转换算法。专属登记测试必须真实执行且通过,无关测试配对不能替代。未变的 v3 宿主在纯文档变更时不重做版本迁移。
使用原生配置选择项时,registration 结果为 chrono-registration-view/v2,用 config_bindings 保存两端入口/实际配置路径。解码器输入为 chrono-historical-decode/v3,新增同一绑定,并按原路径保留 selector 与目标值。身份或原字节缺失/替换时拒绝;后续读取器也按解释结果核对保留解码输入的格式、标准入口和两端绑定。
宿主明确选择相应 decoder 时,inputs 消费者实际执行所选解码器及专属兼容测试;即使候选已没有旧目标,历史 selector/目标仍保留原值。没有转换需求时,不额外执行解码器或兼容测试;需要转换的格式变化仍须满足上述迁移要求。
按范围 CI 与完整 workflow 共用 registration 的测试移除结构检查。不设替代项时,必须移除定义测试的项目/脚本及配对生产者,并明确声明生产者也无替代移除。分组别名通过保留的定义所有者解析。替代项必须解析成唯一当前测试,其现计划必须实际通过;移除声明或仅清单汇总都不能批准未执行替代。
单元汇总通过原回执核验全部全局选中的当前操作。removed、retirement_context 保留已移除身份、旧定义和声明成本,空成本仍未知。仍存测试可以更新方法,不必永久保留已删除操作。
通用转换和迁移接口使用合成、自包含 workflow 样本,验证明确映射、有序操作、实际转换回执和失败输入,不获取历史仓库,也不提供生产兼容路径。当前演进和移除证明归工作流检查。
专属 routes/projects 测试覆盖真实进程、保留输入、含空格宿主路径、不同 cwd、字面特殊字符/空/换行参数、顺序/去重、拒绝用例及真实退出/输出/副作用。单工作者检查不算独立评审、真实 CI 或落地证据。同一影响结果的登记成本由独立成本检查负责。
测试项目可增加 test_groups,将不带 test: 前缀的测试 ID 后缀映射到同记录的 action 键,映射必须包含原项目 ID。省略时继续使用 execute 别名;脚本保留原要求。例如 {"suite":"core","detail":"detail"} 把 test:suite、test:detail 分别绑定到同一专属项目的两项 action。
registration 为完整和按范围消费者解析身份、定义项目和最终操作。空/重复绑定、本地 action 缺失、在生产项目/脚本上放分组映射,以及明确身份冲突都会失败。原有歧义别名继续可见,按本次变更范围判断。
各组独立登记 FILEMAP 计划、成本和依赖边,生产者仍保留原专属测试配对。配对校验要求生产者到每组都有明确执行边。登记变化在两端保留全部组身份为记录目标,不从名字、路径或 Cargo 过滤器猜依赖。计划必须含绑定的最终 action。原始未过滤 action 可以供发布使用,而不成为当前独立单元计划。
projects v2 要求每个项目和独立脚本都有非空 language,包括专属测试。projects 只比较受影响的生产/测试配对:字面标识相同通过,唯一额外允许的配对是生产 shell、测试 python。宿主显式使用这两个保留名称;其他语言 ID 按原样比较,不按路径、扩展名、工具或扫描推断/标准化。
v2 缺少语言声明会在结构检查失败,受影响配对不匹配则在业务前报 E_TEST_LANGUAGE。v1 保留原要求,拒绝新字段。语言编辑发生在原项目/脚本记录,因此两端影响覆盖仅元数据变化及已有明确测试边;未受影响的历史含义错误不重新判断。
这只验证声明的配对语言,不能证明实际内容或不存在隐藏跨语言辅助。已有 routes/回执仍把实际操作绑定到登记参数和工具。完整宿主采用和外语测试逻辑迁移仍须另行完成。
宿主 macOS/Linux 工具表、固定 macOS 测试政策、scoped 检查和发布配方已移除没有现役操作使用的 python3 绑定。路径遮蔽回归由 Rust 命令边界替身提供版本输出,核对 PATH 中的同名替身不会替换显式绑定,并检查单元和汇总参数保留该路径;生产政策中的 Bash 声明仍单独核对。Python 业务示例按自己的声明使用解释器;共享测试宿主的迁移见下文。
**宿主政策与测试同时变更:**删除旧解释器绑定及其专用假工具分支,保留路径、版本和真实进程断言,不修改工具解析产品逻辑。需要验证登记影响选中的消费者;完整构建、验证和存储成本未测。
input 消费者的历史配置/workflow 转换器及兼容性检查改由现有 Rust 测试项目编译和执行,删除 10 份 Python 转换及故障样本。独立契约先验证两类转换、原字节、两端选择和拒绝边界;真实宿主执行 Rust 解码器与兼容性程序,保留原快照及下游视图断言,并用实际返回篡改值、失败及无转换成功的程序验证拒绝。工具采用宿主相对路径,克隆后可直接执行;历史解码器只允许版本观察,实际转换调用始终失败。新增 Rust 源和工具输入均显式登记,没有新增项目或第三方包。共享宿主、原生 input 断言、缺失输入写入器及两份产品样本也复用下述 Rust 执行辅助程序;总构建、执行和存储成本未测。
测试辅助程序与宿主登记同改: FILEMAP 把共用 Rust 源明确连接到 projects、filemap、workflow 和 inputs 的专属测试项目;各项目由自己的 Cargo manifest 编译同一现有 chrono-test-project-execution,不依赖另一个测试项目的 target。三个使用方新增对锁中已有 serde 的直接引用,没有新增第三方包或独立项目。原未过滤测试操作和限制保留;候选仍需 bootstrap、canonical DELTA 和原生验收,总成本未测。
共享合成执行宿主通过已有 Rust 子程序执行有限场景数据。宿主用 Rust 写入明确登记的 .case 文件;子程序读取实际产品样本、计算结果,检查准备顺序,观察原始参数/工作目录/环境,并执行写入、退出和原始字节输出。六项独立契约先观察修改前的预期失败,再验证成功、拒绝和边界;原消费测试继续覆盖执行顺序、输入变化、输出超限和非零退出。工具与输入统一登记为 fixture/execution-tool,不再观察 Python 解释器。
filemap 的额外生产/测试配对和修改后的准备方法使用同一 Rust 辅助程序,保留修改 action 参数触发语义选测、额外套件执行和共享前置只执行一次的原断言。共删除 11 份内部 Python 样本,动态生成的 Python 行为也同步迁移。Python 业务接入示例按实际使用方保留;完整跨语言依赖审计、候选交付和总成本仍须分别核对。
workflow 转换器及其兼容性检查由现有 Rust 原生测试工具编译和执行,不再调用两份 Python 样本。独立契约覆盖有序操作、原定义保留、输入不变及错误拒绝;真实宿主继续核对转换期间写入候选输入的拒绝结果。分单元汇总回归记录实际转换和兼容性调用,随后核对汇总不重新执行业务。FILEMAP 显式登记编译边,测试宿主同步迁移工具、操作和必要输入;共享业务执行也改由同源 Rust 工具承担,迁移追踪包装器同步绑定实际 Rust 执行物;构建、复制执行物及存储总成本未测。
workflow 短入口测试用已有 Rust 辅助工具模拟 prepared-input 响应。普通完整单元的原件获取、分页作业、沿用 attempt 和汇总仍由现役 Rust 测试验证;未采用的 native_adoption 扩展及其专属种子测试已退役。
分开运行的 full 单元/汇总测试也复用同一 Rust 原生工具,以明确的 full-units profile 提供原有两次运行列表、源码响应及原件下载。原有独立检出、失败重试原件、汇总时业务工具不可用、两份产物回执,以及篡改获取原件后拒绝且不执行业务的断言保留。源码沿已有 FILEMAP 编译边选择同一专属测试操作;没有增加依赖或测试入口,其他外部接口样本及完整 SPEC 验收仍未完成,总成本未测。
Python bootstrap 的源码导入和字节码检查随实现退役,不作为 Rust 运行时义务。Rust worktree 回归使用独立 Rust 后代验证原父进程返回后的租约保护和最终释放;bootstrap 调用、拒绝及原报告引用由现役 Rust 专属测试验证。
工作树所有者发布测试直接运行现有 Rust bootstrap 的生产入口,由独立测试项目编译同一入口源码,并复用已登记的薄 shell 转发样本。测试宿主使用当前工具链登记表,不再复制旧 Python bootstrap、所有者和共享安装模块。原阶段报告、inode、继承租约、真实排除、输入漂移拒绝、发布失败及恢复断言保留;构建程序不可用时,已完成的阶段原件仍须能由工作树所有者发布。源码和样本通过明确的编译边连接测试项目;没有新增第三方依赖或另一套构建实现,总成本未测。
无使用方的 Python owner 专用验证 profile、伴生实现和重复操作入口已移除。部署测试继续属于标准 worktree 套件;资格读取、阶段复用和原件绑定由现役 Rust bootstrap 专属测试验证。旧 Python 测试的实现专属断言随实现退役,不声明逐项保留。
测试清单实现及配对测试已迁入 Rust CI 项目,原 Python 源码导入/字节码断言随实现删除。worktree 的真实子进程租约回归同步调用 Rust 清单程序,保留包装进程死亡后的后代保护断言。两端变更仍覆盖已删登记关系。验证和总成本节省未测。Cargo workflow 样本继续声明独立 Cargo home;所选测试现在绑定 Rust 命令替身,只接受当前具名样本的源码、manifest、lock 和 argv,写出绑定这些输入的产物数据。后代租约、原失败流和退出码继续由 Rust 子进程验证。替身不调用编译器,不能提供真实 Cargo 构建或成本保证。
发布渲染测试在解释器边界使用 Rust 替身,只接受一个规范引号 argv,以及现役发布元数据的两行前置写入;保留字面参数、原失败和依赖元数据。未知语法或程序拒绝,不转交 Shell。Rust YAML 消费者核对固定 download action、artifact-ID 输入、目的路径、merge-multiple,以及没有 name/pattern 选择器。解释器 PATH 遮蔽和生产者启动前漂移也使用同一 Rust 辅助程序;漂移仅在版本输出后替换自己的私有可执行文件,仍核对真实摘要拒绝和原获取证据。
产物获取期限测试要求精确的累计超时错误,且不能生成汇总清单。元数据、下载、源码检查共享同一期限,早期阶段也可能耗尽。独立 stdout、stderr 用例仍要求到达源码检查并拒绝合计流成本。两秒样本预算、故意延迟和生产限制不变;测试不再规定哪一阶段必须赢得时钟竞争。
按范围、registration 与输入快照的 Git 事实测试复用 Rust 命令边界模型。各现有 helper 保留具名 profile、环境、轨迹、非 UTF-8/NUL 输出、非零退出、超时、输出上限和私有执行物漂移;普通 Git 响应来自同一份有限仓库数据模型,不启动真实 Git。模型只服务当前登记使用方,未知命令失败,无真实程序回退。独立 Rust 预期核对原 wire 数据、提交/引用、CAS 失败和 linked metadata;它们不证明外部 Git 的正确性。
**测试实现与宿主登记同改:**FILEMAP 为现有源码增加 registration 测试项目的第三条编译边,合成宿主同步登记实际 profile、mode 和命令替身绑定。各项目沿原未过滤 Cargo 测试操作验收;未增加依赖或测试入口,其他跨语言逻辑及完整 SPEC 验收仍未完成,总成本未测。
**外部接口样本与宿主登记同改:**分发安装/升级测试的六份静态外部执行资产独立存放并由 FILEMAP 编译边连接 distribution-tests。Rust 驱动以 include_bytes! 使用原字节,保留 alpha/beta 两版输出、安装器退出 0/23、摘要/长度、完整性拒绝和打包的原断言。样本仅提供真实外部接口,不承载测试驱动或断言;没有增加测试入口或依赖,总验证成本未测。
projects 的 scoped adapter 测试编译同一 Git helper,沿现有 scoped profile 使用有限模型。原四个用例及其断言保留:唯一版本观察、逐调用轨迹、实际两流摘要、规范 argv 拒绝、直接/选择后的 full 登记及文档局部性。执行物副本通过既有 fixture 保管方法登记和原生复制,合成宿主明确绑定实际 profile、mode、Rust 替身路径及轨迹环境;FILEMAP 只新增该测试项目的第四条编译边。测试实现与登记同改,不新增依赖或执行入口;候选/原生及完整 SPEC 验收和总成本仍须实际核验。
CI 汇总的基础设施失败回归复用已登记的 chrono-test-ci-diagnostics Rust helper。原测试启动故障子进程,子进程核对父进程身份、发布自己的 PID 后中断父进程,并保留原 30 秒存活期限;外层 Rust 操作等待该启动者的真实信号结果,保留原输出后返回真实退出 0。移除这项回归的内嵌 Python 和 shell 故障驱动,同步迁移合成宿主的工具、参数及必要输入。原基础设施失败、空汇总退出码、原回执、失败汇总及唯一调用断言保留,执行物和编译边沿用现有登记,不新增依赖或测试入口。helper/外部接口样本的完整语言登记及完整 SPEC 验收仍未完成,验证和存储总成本未知。
CI 判官测试的普通操作、独立单元、扩展和替换方法也由同一个 Rust helper 执行。合成宿主明确传入已登记的 .case 输入,每个输入只选择一个具名测试场景;实际延迟、原始输出、Git 索引变更、可执行位和输入修改均在 Rust 中实现。同步迁移 action、工具、必需输入、FILEMAP 边、方法及执行物预期,保留原 2 秒延迟、128/80,005 字节输出、20 字节诊断、模型产生的索引变化、全部原测试与断言。保留配对语言的声明测试,不从文件扩展名推断实现语言;其他外部接口样本及完整 SPEC 验收继续按各自范围验证。
CI 单元与短入口回归的 alpha/beta 操作、业务失败及大输出也由现有 chrono-ci-test-transport Rust helper 执行。已登记的 .case 输入选择有限具名场景,保留原调用标记、退出 7/9/19 和原诊断、相同确定性 1,100,000 字节载荷与前缀。迁移合成宿主的工具、action、生产占位方法和 FILEMAP 边;转换拒绝回归仍在任何版本探测/启动前失败,Rust 探测与退出 66 场景保留原禁行标记。生成工作流与安装器的命令边界按下述固定域替身验证;真实外部程序行为及完整 SPEC 目标仍须正式入口验收。
registration 的报告传播回归由既有 Rust 子程序提供真实 --version 输出,保留 stdout、stderr、退出状态、证据摘要及报告来源断言,不再探测系统 Python。启动消费链逐字比较登记参数,不剥离 -B;未登记参数差异仍须拒绝。语言配对与脚本登记中的 Python 标识继续作为多语言配置样本,不因此启动解释器。业务 Python 只由独立示例使用;本仓安装、bootstrap、发布和通用检查不要求 Python。候选、原生交付及完整 SPEC 的其他义务分别验收,总成本未测。
**缓存验收采用中的测试实现与宿主登记同改:**所选使用方的 Git/Cargo、生成命令与分发启动器边界迁移到 Rust 替身;原未过滤操作、线程设置、时限和断言保留。共用模型、外部 wire 数据、manifest/lock、真实消费者边及严格 verify.runner-fixture-tests 根同步登记,没有新增工具链。分发替身只接受固定模板摘要的 install/adopt 两种数据域,真实 Rust 安装器仍核对原 manifest、锁、文件和结果;下载失败与完整性拒绝仍保留原退出和清理行为。薄启动器样本按固定原字节核对后,由 Rust 执行对应的转发或归档操作,不调用 Shell、tar、mv 或系统 Git/Cargo。解释器和外部工具自身的真实行为仍归正式生产入口验收。
共享 Git 环境通过现有单例测试子进程隔离;父进程核对原测试身份与结果,不修改原 Cargo 库存或串行化套件。CI、projects、workflow 和 worktree 夹具在同一原生子进程返回后,由原生产者读取自己的对象登记、待退役元数据及命名空间身份。只有各实际使用方已结束、现有 finish 已完成对象与元数据退役,外层私有目录才退出;libtest 成功本身不授予删除资格。活跃 capability、未释放使用方、未知 birth、损坏登记和待保留诊断均阻止外层删除;失败或无法取得退役观察时保留原目录及原错误,沿其已提交政策交接现有 finish/maintain 责任,不重新启动原任务。
原件读取作用域的最后释放断言也沿现有单例子进程隔离,避免其他测试的 fork 临时继承保护描述符。并发小输出和中断采集的清理回归使用已有的八轮有界维护辅助程序,逐轮核对节点、字节和实际剩余声明;未完成时报告全部原轮次,不提高生产预算。CI 保留原件的汇总回归启用已有判官 stderr 诊断,以保留执行阶段和操作事件;诊断不改变原退出、时限或断言,也不证明历史超时已修复。
CI 的点号/下划线单元回归也沿已有入口保留完整命令结果,断言失败时同时输出退出状态、stdout 和 stderr,避免只打印空 stderr 丢失原 stdout 中的失败报告。原单元选择、期限和实际检查断言保留。
缓存中断回归分别验证活任务的同址重入拒绝,以及独立地址仍能执行。两项复用同一 Rust 夹具,各自核实时流、维护期间保护、真实 SIGKILL、原信号结果和中断后零重派发;不在同一个五秒探测窗口内串行完成两项 CLI 场景。握手与原任务提前返回沿同一个原生 socket 通知,再由原线程交回完整结果,不把启动前准备塞进额外的五秒握手期限。原五秒探测与十秒外层期限保持不变,信号失败先释放并加入原任务,再报告系统错误与原退出,避免断言丢失失败原因。额外一次活探测的执行与 IO 成本尚未测。
缓存封存释放回归复用点名维护,只选择本用例实际消费的两个原件。maintain_originals_at 与现有 maintain_at 使用同一已观察时间语义;普通 maintain_originals 传入当前时间,继续走同一实现。测试按原处置回执移出已退役对象,不重复观察无关终态配额。私有夹具和生产政策、输出容量、每轮限制、十九轮上限、最终物理删除及新代际断言均保留。
私有夹具只把已处置对象的 metadata_keep_seconds 设为 0:成功原件的使用方在本次用例内结束,没有后续元数据使用方。失败、诊断及中断仍用当前有限窗口;尚未释放的对象不因窗口或测试成功而获得外层删除资格。查询复用 producer-birth-test 下原所有者的只读观察,不增加状态账本、后台任务或等待通道,也不授权共享存储或真实检出处置。实际恢复、保护和回收仍需原消费者验收。
**源码与宿主登记同改:**三个外部数据样本显式声明 roots: [],保留当前严格 schema,不增加缺字段默认值。原有严格 verify.runner-fixture-tests 和 worktree lifecycle 两根同时登记独立预期及实际调用边;没有执行证明就没有保证,运行时 IO 和模型语义仍须 Rust 行为检查。本次源码交接未运行格式、构建、测试、Verus、canonical 或原生 CI。新增观察、逐例进程、fixture IO/存储和完整生命周期成本未知;当前批验收、完整 §7.5 及整个 SPEC 仍未完成。