Preserve CPU and GPU acceleration plans, evidence and LFS archives; mark research paused
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
# Preserve historical source bytes and SHA-256 across platforms. No EOL conversion.
|
||||
* -text
|
||||
*.jsonl.gz binary
|
||||
artifacts/acceleration-20261001/*.tar.zst filter=lfs diff=lfs merge=lfs -text
|
||||
|
||||
@@ -34,3 +34,5 @@ id_ed25519*
|
||||
/registry/verification-runs/
|
||||
# Historical learned deltas/checkpoints are not source files.
|
||||
/models/learned/
|
||||
# Explicit, audited experiment exports only; original data stay ignored.
|
||||
!/artifacts/acceleration-20261001/*.tar.zst
|
||||
|
||||
+17
-2
@@ -1,8 +1,23 @@
|
||||
# Digital Drosophila — 当前状态
|
||||
|
||||
更新:2026-10-01。独立分支:`codex/lif-author-semantics-lab`。
|
||||
更新:2026-10-01。成果保存分支:`codex/v100-conditioning-acceleration`。
|
||||
|
||||
## 最新状态(取代下方历史摘要的“当前/下一步”表述)
|
||||
## 最新状态:暂停研究,CPU/GPU 两套方案保留
|
||||
|
||||
用户要求保存并上传现有成果,以后再继续。没有恢复训练、没有启动新实验,没有切换正式科学实现。
|
||||
|
||||
- Phase 4AR 按真实已提交账本停在 **1,033/30,000 轮训练及 CPU 校验、138/3,920 probes**;末个未完成提交不算完成,也不自动重试。
|
||||
- 原科学登记 SHA 为 `b63e6281b6505ca3b60acb467dd0b3fae274cf513dcbfd653649ba52e9ba9740`,注册源码为 `80aeb2093db655329774eff7b32fb6e417b8b40b`。
|
||||
- CPU 原方案、独立 CPU 校验和常驻进程方案全部保留;GPU eligibility/update 原型在两张 V100 与 4090 的固定回放上通过逐位比较,没有替换原 CPU 代码。
|
||||
- 全脑常驻回放保持原 4090 环境、原始数学与 fresh state,42/42 次逐位一致。13 组稳态配对:原运行函数中位 5.9825 → 3.7222 秒,配对倍率中位 1.6201×;不是整轮训练加速,也不是学习成功。
|
||||
- 原实验 64,034 文件/16 源码、前一轮 659 产物/13 源码均保持一致。完整历史 Phase 1–4AQ 没有重跑。
|
||||
- 公开原始/参考数据已在独立 LFS 发布分支保存;本次另保存 CPU/GPU 科学回放结果,不包含环境、编译缓存或未确认许可的软件包。
|
||||
|
||||
[CPU/GPU 方案、结果、恢复与限制](registry/acceleration-20261001/README.md) · [为什么有多个分支](docs/40-operations/branches-20261001.md)
|
||||
|
||||
以下全部是历史状态,不能据此恢复任务或认为仍在运行。
|
||||
|
||||
## 2026-10-01 00:09 的历史快照(已被上文停止状态取代)
|
||||
|
||||
Phase 4AQ 已封存为 **PASS-EXACT-UPDATED-BOUNDARY-ENGINEERING-NOT-LEARNING**。Phase 4AR 的普通嗅觉 acquisition 已登记并启动,仍在执行;学习成功尚未判定,没有新 learned candidate。
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
面向 MaleCNS v1.0 的可审计连接组、LIF 模型、感觉接口与局部可塑性机制研究。
|
||||
**这是研究工程仓库,不是已经实现自主学习或游戏控制的果蝇。**
|
||||
|
||||
截至 2026-10-01 00:09(Asia/Shanghai),最新封存阶段是 **Phase 4AQ:PASS-EXACT-UPDATED-BOUNDARY-ENGINEERING-NOT-LEARNING**。
|
||||
**Phase 4AR 普通嗅觉 acquisition 正在执行,科学结论未判定**:采样时已提交 411/30,000 轮训练及 CPU 校验、62/3,920 次独立 probe;不是实时自动更新计数。
|
||||
最新研发分支为 `codex/lif-author-semantics-lab`,远端默认分支仍为初始化分支。本页状态不表示已完成分支合并。
|
||||
截至 2026-10-01,最新正式封存科学阶段仍是 **Phase 4AQ:PASS-EXACT-UPDATED-BOUNDARY-ENGINEERING-NOT-LEARNING**。
|
||||
**Phase 4AR 已按用户要求停止,暂不恢复**:已提交 1,033/30,000 轮训练及 CPU 校验、138/3,920 次独立 probe;执行尚未完成,学习成功未判定。
|
||||
本分支 `codex/v100-conditioning-acceleration` 同时保留 CPU 与 GPU 方案及两轮独立性能回放。它不是已升级的生产运行时;原登记实验和权重没有改动。远端默认分支仍为初始化分支,见[分支说明](docs/40-operations/branches-20261001.md)。
|
||||
项目顶层验收口径为 **5/10(50%)**;这不是生物学逼真度、工作量完成率或剩余工期。
|
||||
最新正式候选运行时为 `MaleCNS-LIF-runtime-v2-deterministic-candidate`。
|
||||
`MaleCNS-TemporalEligibility-v2-candidate` 与 `MaleCNS-OlfactoryEncoder-v1-candidate` 保留。
|
||||
@@ -15,7 +15,7 @@
|
||||
|
||||
| 主题 | 文档 |
|
||||
|---|---|
|
||||
| 最新运行状态、证据与下一步 | [当前状态](CURRENT.md)、[本次同步说明](docs/progress/repository-sync-20261001.md) |
|
||||
| 最新运行状态、证据与下一步 | [当前状态](CURRENT.md)、[CPU/GPU 保存说明](registry/acceleration-20261001/README.md) |
|
||||
| 顶层验收比例与历史基线 | [项目状态](docs/00-overview/status.md) |
|
||||
| 目录和数据流 | [架构与目录](docs/00-overview/architecture.md) |
|
||||
| 科学数据定义和来源 | [数据契约](docs/10-data/data-contract.md)、[来源登记](docs/10-data/provenance.md) |
|
||||
@@ -38,17 +38,17 @@
|
||||
|
||||
服务器项目根目录:`/data/digital-drosophila/`。
|
||||
远程:`ssh://git@192.168.10.31:2222/qishizhe/digital-drosophila.git`。
|
||||
初始化/当前远端默认分支:`codex/project-bootstrap`;最新研发分支:`codex/lif-author-semantics-lab`。
|
||||
初始化/当前远端默认分支:`codex/project-bootstrap`;注册科学源码分支:`codex/lif-author-semantics-lab`;最新独立加速成果:`codex/v100-conditioning-acceleration`。
|
||||
|
||||
Git 保存源代码、配置、文档、书目、阶段证据副本和逐文件哈希清单。
|
||||
**Git 不保存原始 SWC/Feather、CSR、完整事件/状态、模型 checkpoint、虚拟环境或大型压缩包。**
|
||||
普通 Git 不直接保存大型科学二进制。获准公开再分发的原始/参考数据已在 `codex/lfs-public-resources` 通过 **Git LFS** 归档;本分支另通过 LFS 保存本次 CPU/GPU 回放的科学结果。没有上传虚拟环境、SDK 编译缓存、凭据或其他服务的数据。
|
||||
原项目实占约 29.72 GB(十进制、初始化前统计),不会因为初始化 Git 被删除、搬移或重写。
|
||||
仅 clone 本仓库不能恢复全数据;按[恢复说明](docs/30-reproducibility/restore.md)配置单独的数据副本。
|
||||
只取得 Git pointer 不能恢复全数据;需下载对应分支的 LFS 对象并验证内部成员。本次恢复说明见 [CPU/GPU 发布入口](registry/acceleration-20261001/README.md)。这不是全服务器灾备。
|
||||
|
||||
## 安全的首次检查
|
||||
|
||||
```bash
|
||||
git clone --branch codex/lif-author-semantics-lab ssh://git@192.168.10.31:2222/qishizhe/digital-drosophila.git
|
||||
GIT_LFS_SKIP_SMUDGE=1 git clone --branch codex/v100-conditioning-acceleration ssh://git@192.168.10.31:2222/qishizhe/digital-drosophila.git
|
||||
cd digital-drosophila
|
||||
python3 -B tools/repo_guard.py
|
||||
```
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,23 @@
|
||||
# 分支用途与当前入口
|
||||
|
||||
2026-10-01 只读审计。此次只保存/推送已存在的加速实验分支,不删除分支、不强推、不合并、不更改默认分支。
|
||||
|
||||
所有名称均带 `codex/` 前缀。
|
||||
|
||||
| 分支 | 用途 |
|
||||
|---|---|
|
||||
| project-bootstrap | 最初项目归档、数据索引、论文与来源;当前远端默认入口 |
|
||||
| apl-pn-scope-audit | APL→PN 实际接触位置审计 |
|
||||
| terminal-scope-diagnostic | PN calyx 接触范围诊断 |
|
||||
| lif-semantics-audit | 冻结 LIF 语义与反馈回路审计 |
|
||||
| lif-author-semantics-lab | 独立模型及正式 Phase 4AR/CPU 实现,当前科学现场的分支 |
|
||||
| lfs-public-resources | 获准公开再分发的大数据、作者资源及实际远端恢复验证 |
|
||||
| v100-conditioning-acceleration | CPU 常驻、独立校验、V100 更新原型、4090 常驻回放;本次最新保存入口 |
|
||||
|
||||
前五个主要是同一条提交历史上的阶段指针,并不是五份独立完整数据。它们线性继承至 `09187e4`,之后分为 LFS 资源发布和加速实验两条路线。Git/LFS 会按内容地址保存对象;多个分支名不意味着同一文件被完整复制多份。
|
||||
|
||||
加速分支原已在本地存在,本次推送后远端共 7 个分支。CPU/GPU 两套实现放在同一加速分支的不同目录,不再各建分支。LFS 资源分支仍独立,不能把这次发布描述为已经合并全部数据。
|
||||
|
||||
默认仍为最早的 bootstrap,所以网页默认看到的内容较旧。这是入口未整理,不是后续工作丢失。
|
||||
|
||||
后续可在用户确认后统一主入口、给历史阶段打保留标签,再整理旧分支。集成 LFS 时需核对属性、状态文档、许可说明和自动下载开销;不得把工程实验分支直接视为通过科学验收的正式运行时。
|
||||
@@ -0,0 +1,43 @@
|
||||
# CPU / GPU 方案保存 — 2026-10-01
|
||||
|
||||
用户要求保存当前方案并上传,之后再继续。**原 Phase4AR 保持停止,未训练、未安装新权重,未进入下一科学阶段。**
|
||||
|
||||
## 保存内容
|
||||
|
||||
| 方案 | 代码 | 状态 |
|
||||
|---|---|---|
|
||||
| 原 CPU 更新与独立验证 | `models/male-cns-lif/olfactory-conditioning-lab-v1/`、`conditioning-interface-v2/` | 注册实现保留,未替换 |
|
||||
| V100/4090 eligibility 更新原型 | `models/male-cns-lif/conditioning-acceleration-v1/` | 固定案例逐位回放 PASS,不是全脑已迁移到 V100 |
|
||||
| CPU 常驻与 4090 全脑常驻 | `models/male-cns-lif/conditioning-pipeline-acceleration-v1/` | 42 次全脑精确回放 PASS,不是已验收生产运行时 |
|
||||
|
||||
本目录的 `gpu/`、`pipeline/` 保存原报告、manifest 与完整性说明的原字节副本;`publication-catalog.json` 逐项记录公开归档成员和有意排除项。完整数值回放、请求、状态和诊断回执封装在 `artifacts/acceleration-20261001/` 的两个 Git LFS 归档中。
|
||||
|
||||
代码版本:GPU 核心 `221e1f13f758ebe8d9f188bab976c361f7cacf45`;常驻回放封存 `018f038c7857c7e0236dd7408a680458520d92ce`。原科学登记源码 `80aeb2093db655329774eff7b32fb6e417b8b40b` 不变。
|
||||
|
||||
原科学现场停在 1,033 轮已提交且 CPU 校验的训练、138 个已提交 probe。完整科学执行、独立学习 gate 未完成;本次性能成果不代表学会关联记忆。
|
||||
|
||||
## 来源、许可与排除
|
||||
|
||||
MaleCNS v1.0 原数据来源为 [官方数据页](https://male-cns.janelia.org/download/),既有许可审计为 CC BY 4.0。署名保留 Male CNS collaboration:FlyEM/HHMI Janelia、University of Cambridge、MRC Laboratory of Molecular Biology、Google Research 及原论文作者。本项目进行了既有 neuron-only 过滤/重编号和模型模拟;本次只原字节复制已生成的回放数据,不重新推导或修改科学数值。
|
||||
|
||||
嗅觉输入来源链中的 DoOR.data 2.0.1(commit `eea72d64b42a4e91dafe822cf0b5204de33f8d34`)维持 CC BY-SA 4.0,作者 Daniel Münch、C. Giovanni Galizia、Shouwen Ma、Martin Strauch、Anja Nissler。涉及其派生输入的成员保留此 ShareAlike/署名约束;不将其许可泛化至无关代码。[DoOR 论文](https://doi.org/10.1038/srep21841)。Shiu 作者源码维持其原 MIT 声明;本项目是 adapted dynamics,不是严格原模型复现。
|
||||
|
||||
原资源许可证据及上游 notices 在 `codex/lfs-public-resources` 的 `registry/publication-20261001/`,固定发布提交 `5b1d1b7`。本次没有打包 NVIDIA SDK、CuPy/PyTorch 环境、FlyVis、论文全文或其他服务。软件没有被擅自统一换证,仍适用仓库 NOTICE 和各上游声明。
|
||||
|
||||
明确排除:虚拟环境、CUDA 编译缓存/中间产物/二进制、安装下载日志。完整原实验(包括失败与编译诊断)仍原样留在服务器;原 sealed manifest 包含未上传缓存的哈希。因此公开归档应使用 **publication-catalog.json** 校验,不能要求原始全目录 SHA 清单在省略缓存的副本中全部通过。没有丢弃科学失败案例。
|
||||
|
||||
旧原始/参考大数据不重复上传,它们在 `codex/lfs-public-resources`。本次发布不是全服务器或全部历史科学目录灾备,也没有打包已停止 AR 的所有 64,034 个现场文件。
|
||||
|
||||
## 恢复与验证(不运行模型)
|
||||
|
||||
在新目录 clone 本分支,安装 Git LFS,执行:
|
||||
|
||||
```sh
|
||||
git lfs pull --include='artifacts/acceleration-20261001/**'
|
||||
python3 -B tools/acceleration-publication/archive_results.py verify
|
||||
```
|
||||
|
||||
验证器只读流式校验归档 SHA、成员集合、每个成员字节数与 SHA,不解包、不运行模型。
|
||||
如需解包,只解到新建空目录;不得覆盖 `/data/digital-drosophila` 或直接运行旧封存脚本。性能原型依赖固定科学源与历史输入,不能只 clone 就自动恢复正式训练。
|
||||
|
||||
`delivery.json` 只在真实远端 push、独立新 LFS store 下载和完整成员验证成功后写入。没有该回执时,不能把打包完成称为异机恢复已通过。
|
||||
@@ -0,0 +1,29 @@
|
||||
# V100 conditioning acceleration — engineering replay result
|
||||
|
||||
Status: **PASS-ELIGIBILITY-UPDATE-REPLAY-EQUIVALENCE**. This is not a learning result or a production-training promotion.
|
||||
|
||||
Benchmark code commit: `221e1f13f758ebe8d9f188bab976c361f7cacf45`.
|
||||
|
||||
| Device | Real-fixture replay median (prep + transfers + comparison) | Resident CUDA kernel median |
|
||||
|---|---:|---:|
|
||||
| Tesla V100-SXM2-16GB (v100a-02) | 3.430 ms | 0.122 ms |
|
||||
| Tesla V100-SXM2-16GB (v100b-01) | 3.344 ms | 0.122 ms |
|
||||
| NVIDIA GeForce RTX 4090 (rtx4090-01) | 3.327 ms | 0.074 ms |
|
||||
|
||||
Each GPU passed14sealed real fixtures +16fixed synthetic cases, with sampled trace, final trace, allUS snapshots and delta byte-identical to the original independent CPU oracle. Six invalid inputs were rejected on each GPU.
|
||||
|
||||
CPU warm reference includes the original API's repeated provenance checks and AST parsing; it is only one warm sample perfixture. GPU authenticates the source and complete anatomical mapping once. Therefore ratios in JSON describe API implementation replay, not pure hardware acceleration.
|
||||
|
||||
The CUDA kernels preserve every timestep, float32 separate round-to-nearest operations, exact US timing, noUS zeros, compartment/frozen/D0 identity and the depression floor. No gain/learning-rate/tau/threshold/connectome/sign changes. No dense time×neuron matrix.
|
||||
|
||||
A new candidate-only CuPy environment and explicit CUDA12.6 nvcc compilation are used. Original science and ComfyUI environments are unchanged. All three ComfyUI queues were checked before each fixture; no services were stopped.
|
||||
|
||||
Integrity: 64034 saved files, 3103901058 bytes, 16 registered source files checked; no mismatch. This is the saved Phase4AR inventory, not a new Phase1–4AQ numerical regression.
|
||||
|
||||
Phase4AR remains stopped at1033/30000CPU-verified epochs and138/3920probes. No weights were installed and no training was resumed.
|
||||
|
||||
Next: a separately validated persistent-worker pipeline and end-to-end benchmark. This local optimization does not justify dividing the9-day estimate by the kernel speedup. Independent-seed V100 parallelism is not yet measured.
|
||||
|
||||
Preserved failures: candidate packaging incompatibility (--report unsupported bypip22); first CuPy compile FTZ flag conflict (before any kernel ran). Both were corrected only in the independent branch.
|
||||
|
||||
Compiler references: [CuPy precompiled RawModule](https://docs.cupy.dev/en/v13.6.0/reference/generated/cupy.RawModule.html), [CUDA12.6 compiler options](https://docs.nvidia.com/cuda/archive/12.6.3/cuda-compiler-driver-nvcc/index.html).
|
||||
@@ -0,0 +1,660 @@
|
||||
b63b6d799a83f46c3c69805cfbec316537b06ae7f8e4b63703c9b02575c11cc1 RESULTS.md
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 candidate-freeze.stderr.log
|
||||
8ddcbb332825939eb1e091d87a6f73459de707defedb93654727662a0d4e2f0e candidate-freeze.stdout.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 create-venv.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 create-venv.stdout.log
|
||||
e3cc62cc576238a0d08ebbcfcfb151ba5c6f4bfe4891c3b46c39f66e1ccd5d21 create-worktree.stderr.log
|
||||
8960fa67e787f4103b0ae3dfb1d17d6133754ae9c97244877b148ebba1a302af create-worktree.stdout.log
|
||||
1687fe1688fffa492da67c2a638aff8062fb73dfc9c35931342f7b9bb005d37f cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/build-receipt.json
|
||||
41e670729a7d787b5327f5ae0934bc58147bb7d92f98c43973d68c81c3c56ba7 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/compile-command.json
|
||||
51948332982f31fc0d6612158542ad093a0a728669d4b5c296ec5ccd07ec77b6 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/compiler-identity.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/compiler.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/compiler.stdout.log
|
||||
e6b87f94e8e7c1a5edd09299c15731f5682e1a8b9b689155d615025b37c3a0b2 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.cpp1.ii
|
||||
d91416da2badd78eef607dd5fc261162d05cdb79189237e0ded8554785eddf66 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.cu
|
||||
03ebf12750449e7b99dff31db4cb70e5f49e4819c753b673c43be244d320d40b cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.cubin
|
||||
c5649b5b5bd2b001266af9a4f599237f756e0abb364be2d92f5fc72b10ead562 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.cudafe1.c
|
||||
debb1845f7a23e6a8e351b2f240d30e629ca66a82285f85e4af8558dc14456df cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.cudafe1.gpu
|
||||
a32a96aeddc2ddb97bea81426c4892237a3756f994360ba2f53e43ee28e73915 cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.cudafe1.stub.c
|
||||
9400013920a21185d1c277ee98a62c33659c7cbd4334d75c33ffe71d9486173a cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.module_id
|
||||
b1464ec5c35a33a4b26b6726a0a9e3d38626d09c2f2c073b7b4a52071cedf47f cupy-cache-4090/eligibility-nvcc/c26699b5e4dde91a432b9dc12a348e137c3c290dd9335e9b27785ea9ec9f1ec8/eligibility.ptx
|
||||
e79530a1bddad4ccd3cee9fb123a1c74fcb31cfa9dcf16b4d658b648290eb6e5 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/build-receipt.json
|
||||
d3795422398083d596ac14e849651e420d8a7783459e97b716f3f030c408aac6 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compile-command.json
|
||||
7f442f9e5a883861cec21f6b0539fb8cbba6f5ca81dd9613a841b8cc1bf1767f cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compiler-identity.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compiler.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compiler.stdout.log
|
||||
e3fe0937285d9ce97be26ad25080291cc6fdb55ae0204ebaef33e79ccb31e20c cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cpp1.ii
|
||||
d91416da2badd78eef607dd5fc261162d05cdb79189237e0ded8554785eddf66 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cu
|
||||
812362ec496914d948e3bbafab3febafb01a5af9f91cdf0aa1c52efd6f76aeab cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cubin
|
||||
685c3336b57137584e97a44690889f4d76f18dbd19c47c1f473fd183852e131d cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cudafe1.c
|
||||
72fbd9b61bd45f97b49ccb3b3175b1fb0225c12d3cb58b4fc81c5532f5269203 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cudafe1.gpu
|
||||
aa0746bf3d2c596e9dc24f9a4192e18024bd65f8b65f04bef8440f7f175eab00 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cudafe1.stub.c
|
||||
5765dba7d94e57db96df0b36300efe7b4767f283f2e08e07b8a3b5af79768a87 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.module_id
|
||||
45a7cc53c2d488cff4c012f3b57fdb0dc4644f8e221f81a54bc7805878bc1fc6 cupy-cache-v100a/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.ptx
|
||||
f65343fc1406047f75072fe9be50c6e97a7f69e7a60a53a51a5fd7d66d0f9b2f cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/build-receipt.json
|
||||
7dbf5552fa4d5d7530692b7d5b05b643fea96648bfdf8bebd9a5cbe2aa4625dc cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compile-command.json
|
||||
7f442f9e5a883861cec21f6b0539fb8cbba6f5ca81dd9613a841b8cc1bf1767f cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compiler-identity.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compiler.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/compiler.stdout.log
|
||||
b5e707bffb848e57191ce029e3f8decf55b9531b3edbbe7e10d8d64523c193c0 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cpp1.ii
|
||||
d91416da2badd78eef607dd5fc261162d05cdb79189237e0ded8554785eddf66 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cu
|
||||
812362ec496914d948e3bbafab3febafb01a5af9f91cdf0aa1c52efd6f76aeab cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cubin
|
||||
a4009f94f1839fed9e136e7e7f2e83a2a93b4758b61b533d16cb8faafcaf1382 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cudafe1.c
|
||||
11fc13fae5097a0dfb0580ae21de5d4820ce14abd06b289bc4381b6fade8f879 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cudafe1.gpu
|
||||
583af03a0f2f6de36a11e8c7a823b5624b3d6afcc4f005ebf0e91046fc3d23fb cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.cudafe1.stub.c
|
||||
444a6ec9096efd45b32931ca90225146ac84b5dbbc5202ee0a37ef26fead346e cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.module_id
|
||||
45a7cc53c2d488cff4c012f3b57fdb0dc4644f8e221f81a54bc7805878bc1fc6 cupy-cache-v100b/eligibility-nvcc/6020224e345a164954bb922d05bd2aa9d89677bf427c34dac24f75400d404458/eligibility.ptx
|
||||
06df3158d0329dc925ecd7ceabe47f7c83ee8974f4fd959516411e82ed0dc34b environment-authority.json
|
||||
794855bb5509c4773378f7023219574f90e1bc393d48570161c9e024a91e7eb9 final-summary.json
|
||||
b5b896ac413d5fcbd8510e553993884a3e941d10f2a4bbbf25f7ccb4bc263781 fixtures/00-cs_only/authority.json
|
||||
e70005480e1d88131e9b41c6acda1c5fa0454ec2d9a1c4cdb80c08150cbe89dc fixtures/00-cs_only/command.json
|
||||
9dfe7afae9438a9df33f32ab8f982d1e24ed5d9a5c72329cfedd65403d25dbe9 fixtures/00-cs_only/fixture.json
|
||||
6e4f6c0ccdad03049c75e056a4222e87c7b1f1d3f90bffb59a1b77ec4b363843 fixtures/00-cs_only/fixture.npz
|
||||
5aa38f581478835ef2c2bb25218556959195ea1b913eb5167b837b276475c84c fixtures/00-cs_only/fresh-cpu-validation.json
|
||||
2a8d5e9b0072e40d69e46258ff8ced3379f3e72bd9d86e49caaa74918a00be42 fixtures/00-cs_only/inputs.npz
|
||||
9e72a3b9c88f74278273f551a2231fd4fedab085393bf2e36103295c397aa0e3 fixtures/00-cs_only/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/00-cs_only/reference-sources.json
|
||||
f9d18b20bf096f8bae6b1ddf23c12925a36caf4b7f8bcf17e7cca9e1afd4793c fixtures/00-cs_only/reference-timing.json
|
||||
d0a74fa23c5d8c8634218ad9124b95d3ec893563bcfc9d283a124c6de4e4d33e fixtures/00-cs_only/reference-update-receipt.json
|
||||
fe4a3481bb9921e6efec04bfe9803d7adc085ed0b2452c50e224f570e880ae2f fixtures/00-cs_only/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/00-cs_only/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/00-cs_only/reference.stdout.log
|
||||
d3ff59060963eb84cb2dda4f4f316eb946c97f710e6b2b6ef082d66d70ac8a37 fixtures/00-cs_only/source-file-pins.json
|
||||
d0a74fa23c5d8c8634218ad9124b95d3ec893563bcfc9d283a124c6de4e4d33e fixtures/00-cs_only/stored-update-receipt.json
|
||||
827ea67796351b5056ae332dc6bed2da973c07ad09a44b4566c370b806e7dc19 fixtures/00-cs_only/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/00-cs_only/validation.stderr.log
|
||||
79366a956d3006c4bbb9a48da59e8f79ea207ab6549cb34d715210d5fd92a52c fixtures/00-cs_only/validation.stdout.log
|
||||
5da791ac50bafc884861d137cea12dc8bee0108ada5a9456065ba222ad33bf32 fixtures/01-cs_only/authority.json
|
||||
e70005480e1d88131e9b41c6acda1c5fa0454ec2d9a1c4cdb80c08150cbe89dc fixtures/01-cs_only/command.json
|
||||
8af9cfc908858418e04f88d2206237e4fa6b45353a1f57132a1165c764f7e187 fixtures/01-cs_only/fixture.json
|
||||
d287a9b1e06de8ddf0fb333546061b490151b87dec2b6c51a1789866603036a2 fixtures/01-cs_only/fixture.npz
|
||||
3469c42449c07bdb85beb2ae7cf5546d6d479108f1945909424e59f0c810bbe7 fixtures/01-cs_only/fresh-cpu-validation.json
|
||||
86734415f81985e39d9f4ea17aa6f89f72e28932d9359f4c75562e6264996adc fixtures/01-cs_only/inputs.npz
|
||||
a88decbeaa6f64bd82d13ae7ae79822dd99057f17e3975eca4f7aa600223e203 fixtures/01-cs_only/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/01-cs_only/reference-sources.json
|
||||
816e6d4fa5d3e590f4f8c3b2e40a56f9817a98bc85ca2ea3b0cd36a0d608a121 fixtures/01-cs_only/reference-timing.json
|
||||
9c13fcf9dfded5a222c35abf6550cf4dc47dd1d431cee4332613fd5ec020c1f8 fixtures/01-cs_only/reference-update-receipt.json
|
||||
99fc0c344a075642c0965404dfb950463c3aab00527ad7879b073ac334defe95 fixtures/01-cs_only/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/01-cs_only/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/01-cs_only/reference.stdout.log
|
||||
bfc93d51dedfbd37f522459b043f6469923ed892cdab47c1ee131701218166e3 fixtures/01-cs_only/source-file-pins.json
|
||||
9c13fcf9dfded5a222c35abf6550cf4dc47dd1d431cee4332613fd5ec020c1f8 fixtures/01-cs_only/stored-update-receipt.json
|
||||
e8ed3f58c4d81dcff62a1202ddc8343677680b1116279b5d9e47c5d212ad4249 fixtures/01-cs_only/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/01-cs_only/validation.stderr.log
|
||||
cde3a215d29fcdc0c889deca76866e2973d0012170d58cef67959a547b9444e1 fixtures/01-cs_only/validation.stdout.log
|
||||
718fad35b01ffe406db72247ba747c9f5a9d7abbaab466bb4cbefbd6c934c384 fixtures/02-d_zero/authority.json
|
||||
8109c880fdbfbeda8b696e85fe012afcb1bb05fd4c8feb1b5a142dc98e06c3b9 fixtures/02-d_zero/command.json
|
||||
137bb20671520146709129180fa42858004a576cfe00186b855c1e1cb2e3620c fixtures/02-d_zero/fixture.json
|
||||
d7219694f4b13600509ba76282ef2935ccef2a5bb69516d6322dba719c3681ee fixtures/02-d_zero/fixture.npz
|
||||
4616d9adc5e7050c4b8458a4874df6399874406ab28efccd17fa3476354b3efe fixtures/02-d_zero/fresh-cpu-validation.json
|
||||
e5407ce4f164ab242773f50abaa5434956a7c0e08d5090532bd35bb806754950 fixtures/02-d_zero/inputs.npz
|
||||
c8dd355352a81c870405283b2c9957f138e8c9af738d1cb94cc7ad395bcfd800 fixtures/02-d_zero/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/02-d_zero/reference-sources.json
|
||||
c5f86afa7e42971c033116b61da0719bb5e9cc0cfe7b23d0fcdc331593285648 fixtures/02-d_zero/reference-timing.json
|
||||
dc1a5801b2250c391e5500b211b94538f72e45a1ac7474a368ba5475e976e0c7 fixtures/02-d_zero/reference-update-receipt.json
|
||||
b1fe5cb9af21e4fbc7ed758346342c8122c17422aabc2bc31f185ce45f29a8f9 fixtures/02-d_zero/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/02-d_zero/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/02-d_zero/reference.stdout.log
|
||||
f673086b818779a939b32b841f72055363f257fce66a8c94f660ac7bdc6ef8df fixtures/02-d_zero/source-file-pins.json
|
||||
dc1a5801b2250c391e5500b211b94538f72e45a1ac7474a368ba5475e976e0c7 fixtures/02-d_zero/stored-update-receipt.json
|
||||
f18a2388498445c7f72b7a6ca6ca18bb293fe1f60547e6c97ebd30b60ba829cd fixtures/02-d_zero/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/02-d_zero/validation.stderr.log
|
||||
5081f11464fc48a0c2aac7b71462708a194249d16d4e1ff7d94fd4443ecaba63 fixtures/02-d_zero/validation.stdout.log
|
||||
d62ddd05588f89c9c7e3666d8d1a06653ac6e7301aecdcd4fcbfe026760c1581 fixtures/03-d_zero/authority.json
|
||||
e70005480e1d88131e9b41c6acda1c5fa0454ec2d9a1c4cdb80c08150cbe89dc fixtures/03-d_zero/command.json
|
||||
8cdfd61b466a26c87bebc8b428f2d2c2d216a7d66d99729667b12e60cfa4aca8 fixtures/03-d_zero/fixture.json
|
||||
1e08c6c2ab7fb4ed5464446011c20753326609855661747b4f2e957ea2180a7d fixtures/03-d_zero/fixture.npz
|
||||
294dd3720cc72a4d5744f83dcfe589e0a18ecdd3f1d445ff4dd03088beb0ea5a fixtures/03-d_zero/fresh-cpu-validation.json
|
||||
b381836e7174025d8d3713ef5c9f37e3ffd1c7ec34f4f05c2e7d86257641d796 fixtures/03-d_zero/inputs.npz
|
||||
7566258ccbcaf7080fda56719203b73d015e0df181ccf5b8edfeb073c889009e fixtures/03-d_zero/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/03-d_zero/reference-sources.json
|
||||
8f6a15f0e152e4d16590f7c5da3890a8d4518a4da17c36d8ae9fea0ea3d5a625 fixtures/03-d_zero/reference-timing.json
|
||||
a1bb3e238c5f45cdc9b4d3a812cd5c71ed66fe0172ebb7ac9f6e3dee07ecb340 fixtures/03-d_zero/reference-update-receipt.json
|
||||
14053ba60590e38277a400cc73e12f6e5a78c3db2724052b999b9fa3181e03d5 fixtures/03-d_zero/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/03-d_zero/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/03-d_zero/reference.stdout.log
|
||||
afb38d3677cb67a31e88cbbaa1a00abaaa41a2227720e7f22558a2e8ef1d4fb2 fixtures/03-d_zero/source-file-pins.json
|
||||
a1bb3e238c5f45cdc9b4d3a812cd5c71ed66fe0172ebb7ac9f6e3dee07ecb340 fixtures/03-d_zero/stored-update-receipt.json
|
||||
c4b94d65276d73f45a1e20e89e97f09404ade36cece532d4258fb61c834487df fixtures/03-d_zero/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/03-d_zero/validation.stderr.log
|
||||
e9cb098fe3d6d02d20b3ad02e51f56609fbef2c187aa3c415b854f698c4183ff fixtures/03-d_zero/validation.stdout.log
|
||||
f67885668e1f76c9ce055cf8b9b393af069661e0ffaa17b2b64c31e6b769b8af fixtures/04-dan_only/authority.json
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c fixtures/04-dan_only/command.json
|
||||
92d70150d60543d57d3b0e74c9253c8a5ee8c433172b47eb78119db67381fcc8 fixtures/04-dan_only/fixture.json
|
||||
d3308593b3dd900cd87b3d70f1d763e28915717a1da591d6bb0e18c3ad8418ff fixtures/04-dan_only/fixture.npz
|
||||
57c223e70bc779649ce8d96ef6007168b87037ca50b0dd0ed697d1d5d7bdf84d fixtures/04-dan_only/fresh-cpu-validation.json
|
||||
ee57193b3f6474ad17ec5ac5685521e221f4fb79dbe4c5e8a5efb48ce459f303 fixtures/04-dan_only/inputs.npz
|
||||
15f84dff3673d35cb8940a1a243c13de32f03be36368424cebe8a5b68ef3c83f fixtures/04-dan_only/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/04-dan_only/reference-sources.json
|
||||
34014232cc53e9a7720cd82a6368bb67b881cf50fb688257093b627c29b202e4 fixtures/04-dan_only/reference-timing.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/04-dan_only/reference-update-receipt.json
|
||||
e1e6a5ea847c37973ad7918030ecd24a4c303f3b07c06bd54c6585343514e213 fixtures/04-dan_only/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/04-dan_only/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/04-dan_only/reference.stdout.log
|
||||
9e38d6ddfc2a1021815f8d0d4bc3e27c6e946e28a7ed0a347ed8c9dabb83a076 fixtures/04-dan_only/source-file-pins.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/04-dan_only/stored-update-receipt.json
|
||||
c56b76617f2d5fce49a4a614b73da5e064334f282e139f2be757bff73e64b38c fixtures/04-dan_only/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/04-dan_only/validation.stderr.log
|
||||
5b7daadc46ae9f508c260fcb1310f06ee7e9a4a93a2d10319228192d933f7a24 fixtures/04-dan_only/validation.stdout.log
|
||||
696ba064308fe574821e8a40890528903c0f8db06b87a20820066ab026f63750 fixtures/05-dan_only/authority.json
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c fixtures/05-dan_only/command.json
|
||||
82b493cec2b6f26c93acd1f1341c31b09d91ead227ac71db48367efe56be2863 fixtures/05-dan_only/fixture.json
|
||||
d3308593b3dd900cd87b3d70f1d763e28915717a1da591d6bb0e18c3ad8418ff fixtures/05-dan_only/fixture.npz
|
||||
e83e1fbcc9f9a89135ba803d88b7e435b5899cd36bdeb0099133c8a510314a2e fixtures/05-dan_only/fresh-cpu-validation.json
|
||||
ee57193b3f6474ad17ec5ac5685521e221f4fb79dbe4c5e8a5efb48ce459f303 fixtures/05-dan_only/inputs.npz
|
||||
a9485620b134ca73d1c6b4c46975a477cf32722179576e89caa0eb0648a6046e fixtures/05-dan_only/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/05-dan_only/reference-sources.json
|
||||
fd6699c19db6ca4b27a4cdbb6ee56da53cd0d959bbe33c691b45f8433d590fbb fixtures/05-dan_only/reference-timing.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/05-dan_only/reference-update-receipt.json
|
||||
e1e6a5ea847c37973ad7918030ecd24a4c303f3b07c06bd54c6585343514e213 fixtures/05-dan_only/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/05-dan_only/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/05-dan_only/reference.stdout.log
|
||||
c8932db5e698569c7f503b177e0bcadb7691dbb3a6bb7bf95f5d489457ed43a4 fixtures/05-dan_only/source-file-pins.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/05-dan_only/stored-update-receipt.json
|
||||
58c01661634cf16f9bdf49d6097afa70b70654ff977192e9257e011bebd4c288 fixtures/05-dan_only/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/05-dan_only/validation.stderr.log
|
||||
f2e7bc6dee034c030ec8ae2893bbae152ffc8dca380e32ebea866492990e2669 fixtures/05-dan_only/validation.stdout.log
|
||||
7487ac6f63347e8ce7b196f07101813b2760e6d9f361939ea1e7ddb324b4e4f4 fixtures/06-frozen/authority.json
|
||||
012e31724d4a9dca3f530f279883a2c17a99404587c0584fb35c9eda0c12666f fixtures/06-frozen/command.json
|
||||
af37cec01333aa06f859f190b97ace01063b0ff1a3d9473cc07ab2b747ed33c1 fixtures/06-frozen/fixture.json
|
||||
d7219694f4b13600509ba76282ef2935ccef2a5bb69516d6322dba719c3681ee fixtures/06-frozen/fixture.npz
|
||||
ea0f77c89a347692c8e9c2b3a194a8b908c097721ac22fa6796f5c5e000097e0 fixtures/06-frozen/fresh-cpu-validation.json
|
||||
e5407ce4f164ab242773f50abaa5434956a7c0e08d5090532bd35bb806754950 fixtures/06-frozen/inputs.npz
|
||||
da80362f8972cca5d4b927cbc3ab1251ced691b50e769f310f36e5e99eaf1af8 fixtures/06-frozen/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/06-frozen/reference-sources.json
|
||||
a078623ccc1a0b321744aff5c6f00c574dd3505a90b78d10014e7bda19d2a161 fixtures/06-frozen/reference-timing.json
|
||||
7fcefce05842bd93fa60010f33756f867a6f3bb85cb7d7d62664e57f1643e60b fixtures/06-frozen/reference-update-receipt.json
|
||||
b1fe5cb9af21e4fbc7ed758346342c8122c17422aabc2bc31f185ce45f29a8f9 fixtures/06-frozen/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/06-frozen/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/06-frozen/reference.stdout.log
|
||||
acd0f42558d85dd990d83b53c2f1b610cea6c50c55576587623f64def58024d5 fixtures/06-frozen/source-file-pins.json
|
||||
7fcefce05842bd93fa60010f33756f867a6f3bb85cb7d7d62664e57f1643e60b fixtures/06-frozen/stored-update-receipt.json
|
||||
92b433ca642efc2163a12649a9e02dd6128149d45498630378375d99db3202f0 fixtures/06-frozen/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/06-frozen/validation.stderr.log
|
||||
a110e0445eb65dea2b689f5f275171e28940ecf82cf464421da623050dfb869f fixtures/06-frozen/validation.stdout.log
|
||||
a7855b86c84a2af95aa64069c7f37939a156e294076f28d7afd659368d5ac270 fixtures/07-frozen/authority.json
|
||||
012e31724d4a9dca3f530f279883a2c17a99404587c0584fb35c9eda0c12666f fixtures/07-frozen/command.json
|
||||
923609c1b873fdd8757146c7339512c7fe2c0e39a4b122a63312eccd5e8148e0 fixtures/07-frozen/fixture.json
|
||||
b33364a02b8e517a5616e787dc52fed707c7a02c8e766c8db8bdd5e3519c3afe fixtures/07-frozen/fixture.npz
|
||||
793f5051607d210034579d6c5e8f735d82ef827ad0b4466fb1ba8ab32492fd42 fixtures/07-frozen/fresh-cpu-validation.json
|
||||
21ee0894422caac5a92651b36ca1a41ef7af40ace492dc5fd50a8ace6d409841 fixtures/07-frozen/inputs.npz
|
||||
42d9c3edee3f4e6c92a5cf18c5bc8000d6896a7ad67c05a5a83cf4822f5a930e fixtures/07-frozen/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/07-frozen/reference-sources.json
|
||||
7552171339f179d7d5afd95afa620846955e9c4bf4d7929b76e2122c15f6f0a6 fixtures/07-frozen/reference-timing.json
|
||||
dbc34e8d314e6ccf4d62984fdc50b5f3e86097959b73c24f6051b860508261d7 fixtures/07-frozen/reference-update-receipt.json
|
||||
05d2075865314133458d2960786cd1d8d9056e5cdd808192be9edf580f13655c fixtures/07-frozen/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/07-frozen/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/07-frozen/reference.stdout.log
|
||||
77d8e1d43d886b91d20a7557c0f33c296440ec0847c239eafb3c92a933d81000 fixtures/07-frozen/source-file-pins.json
|
||||
dbc34e8d314e6ccf4d62984fdc50b5f3e86097959b73c24f6051b860508261d7 fixtures/07-frozen/stored-update-receipt.json
|
||||
007d19099619f51a2f21ce2ba0365633b6cb8fc5ee9ad1969e51ae9a2954d890 fixtures/07-frozen/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/07-frozen/validation.stderr.log
|
||||
5db3aa7d39e24ba994f2ddeb018cbeb3e73dce4e62093f0f2ac49d811355840a fixtures/07-frozen/validation.stdout.log
|
||||
057370d91fcd3a596a615aca686801e4ac010e3347c86e0f8625392b3d321ca6 fixtures/08-paired/authority.json
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c fixtures/08-paired/command.json
|
||||
9cc866bda3686db4bbaa777f17adddcb081c809c2fb0cba5e0a837c318583e51 fixtures/08-paired/fixture.json
|
||||
66255125ed61c996339b4ca86262a47144f606f1349ce9fe42ca9b14a599f195 fixtures/08-paired/fixture.npz
|
||||
bd648d6aa9f76215566a0212ff58122bbfd27b3b3a7ccb1001293d11ce7fe26f fixtures/08-paired/fresh-cpu-validation.json
|
||||
e5407ce4f164ab242773f50abaa5434956a7c0e08d5090532bd35bb806754950 fixtures/08-paired/inputs.npz
|
||||
0399337c02a9db5a0328384d46070177a008976b614b12a03d8635966bc7f7d0 fixtures/08-paired/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/08-paired/reference-sources.json
|
||||
cae6d6a80eae901d0b8c9147347f4b8aca59939f3f9cb4328d3958b71aa49825 fixtures/08-paired/reference-timing.json
|
||||
d0a660b4e87a786275852c1d759e2750f42d18b354780a2e4a1036b3b3be5056 fixtures/08-paired/reference-update-receipt.json
|
||||
67c2e3bb5b59ded42969dd1e13fcb9a3d17465a4b15e139bd004ed77587df018 fixtures/08-paired/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/08-paired/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/08-paired/reference.stdout.log
|
||||
6f8448d6f2bccaece46a6ff5e16302b026e1ed87e449168752f82d2b5b44f5db fixtures/08-paired/source-file-pins.json
|
||||
d0a660b4e87a786275852c1d759e2750f42d18b354780a2e4a1036b3b3be5056 fixtures/08-paired/stored-update-receipt.json
|
||||
1b11a6ebde1ec534783f63f1f551726e0ca7dfb381f4603cc38f38aeaf6d695c fixtures/08-paired/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/08-paired/validation.stderr.log
|
||||
bb7f511871ca2d89e632377ebd182996b7e8d11fda563a7bf72009cb0c4a7a55 fixtures/08-paired/validation.stdout.log
|
||||
fa75f7a56761529ea409aad47616384728b1aeff8c007f5d1cf365cb387047fb fixtures/09-paired/authority.json
|
||||
e70005480e1d88131e9b41c6acda1c5fa0454ec2d9a1c4cdb80c08150cbe89dc fixtures/09-paired/command.json
|
||||
8b649bc8271cd89e8e5c549f8f76bad7d2e97129aace586e6bf4dce4d2a49179 fixtures/09-paired/fixture.json
|
||||
291659396044089facc673b23ccacea8905263a3978e5a5af320bf50828e2d07 fixtures/09-paired/fixture.npz
|
||||
a5db3c2e0ebb90c53150226d891618a88b760da928b6273f56fbc4b09755ae38 fixtures/09-paired/fresh-cpu-validation.json
|
||||
7e4690296c8801897084c73b30be490132535abe6f0e1b2d5b140efa99c8bc5d fixtures/09-paired/inputs.npz
|
||||
7d1b54e446799eecbabe55b352b500b5edc2881c1d0399992aafd804d254991d fixtures/09-paired/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/09-paired/reference-sources.json
|
||||
6f9328a89809745eb510096c1fda0242dc6144b909cc9c64a195a9ce460e40b8 fixtures/09-paired/reference-timing.json
|
||||
e3ece81002439b3dae1b921ecebc528db3554bd1cb374e336a9af70c555bc01e fixtures/09-paired/reference-update-receipt.json
|
||||
48ebec28571a205c0f374df12677cb585ae594429ece26e3c4bad6068e017cdd fixtures/09-paired/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/09-paired/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/09-paired/reference.stdout.log
|
||||
a6cfba42d04e28ad99f92cedc60b39cb196be677a10ac30415aa530087f381c6 fixtures/09-paired/source-file-pins.json
|
||||
e3ece81002439b3dae1b921ecebc528db3554bd1cb374e336a9af70c555bc01e fixtures/09-paired/stored-update-receipt.json
|
||||
09bd4c8f83c489dbeb074a57490d368aad3b63347e01f8b84e12a4c11e11c66d fixtures/09-paired/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/09-paired/validation.stderr.log
|
||||
bcdb6d7e895a404daf7ef9815b394ea94e74a2c9f5cfce06c36830a33338476a fixtures/09-paired/validation.stdout.log
|
||||
e179f065522cc30505b7dd5d5d6adc41a10d7b3aa49e48a65afbc620ebf48c3f fixtures/10-random_reward/authority.json
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c fixtures/10-random_reward/command.json
|
||||
0f587ac75a5486250b45e9ab624aa3e71db035a3149c09102e9892ed3f269b82 fixtures/10-random_reward/fixture.json
|
||||
66255125ed61c996339b4ca86262a47144f606f1349ce9fe42ca9b14a599f195 fixtures/10-random_reward/fixture.npz
|
||||
18e1d5c11b07b4f25d8ccc08e0e4928da4f7851dd063645a0cd83e2c91a3e677 fixtures/10-random_reward/fresh-cpu-validation.json
|
||||
e5407ce4f164ab242773f50abaa5434956a7c0e08d5090532bd35bb806754950 fixtures/10-random_reward/inputs.npz
|
||||
58d5571bd571120146d208182eccc564f13979d3f9d07c43c4cc922b54b9ae6d fixtures/10-random_reward/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/10-random_reward/reference-sources.json
|
||||
64b4e11de2bb2225c7f46bdcae32220011896181f19a58ef2dccecd6d70be0bb fixtures/10-random_reward/reference-timing.json
|
||||
d0a660b4e87a786275852c1d759e2750f42d18b354780a2e4a1036b3b3be5056 fixtures/10-random_reward/reference-update-receipt.json
|
||||
67c2e3bb5b59ded42969dd1e13fcb9a3d17465a4b15e139bd004ed77587df018 fixtures/10-random_reward/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/10-random_reward/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/10-random_reward/reference.stdout.log
|
||||
8f3acaa47501dacccc6609bc505ec7e3783ebec729900c217392168bf9c1b079 fixtures/10-random_reward/source-file-pins.json
|
||||
d0a660b4e87a786275852c1d759e2750f42d18b354780a2e4a1036b3b3be5056 fixtures/10-random_reward/stored-update-receipt.json
|
||||
1462b51d4d1503eb3c991a0865b8fb7e54a10587b42f5b506b6b77aa2fd368cb fixtures/10-random_reward/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/10-random_reward/validation.stderr.log
|
||||
c901e914fb8e0ba84a3c491a3128940ef3a0c554243743b70647106fea119e80 fixtures/10-random_reward/validation.stdout.log
|
||||
ce2d98f1c6071b381c92dfb2c50582eea755cdfa794badf5b07f42922304c15d fixtures/11-random_reward/authority.json
|
||||
e70005480e1d88131e9b41c6acda1c5fa0454ec2d9a1c4cdb80c08150cbe89dc fixtures/11-random_reward/command.json
|
||||
b7ac9446d02b8e532997f994a17730f8bb7477bc495b639508bc095cab66b4be fixtures/11-random_reward/fixture.json
|
||||
74175c25f3315988ffec266a865c54793a2f7ce3a0679b9e8544f79c074568cf fixtures/11-random_reward/fixture.npz
|
||||
d02cfb073c2921f246004ca3f7434c2347431533d284ddb2488c551149d6d4f4 fixtures/11-random_reward/fresh-cpu-validation.json
|
||||
62b9ef6e3add910e998d11d4e419eeabf5cc8d3b25cc1a0105ab6ea3784fc4c7 fixtures/11-random_reward/inputs.npz
|
||||
cae2fcf6ff67ffbc5b9ba627160961d5e63f33b1611f3d6759ace9c25233eaa9 fixtures/11-random_reward/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/11-random_reward/reference-sources.json
|
||||
b2eebcbee7bac6b2dd941f55fbe66bb2d5320a2068c7f060990aa2d1ad235b03 fixtures/11-random_reward/reference-timing.json
|
||||
93aaedd62b47bf35bee3e3201c52851fddde077633d630e808acf97bfa995c0b fixtures/11-random_reward/reference-update-receipt.json
|
||||
0878210890008fecf0c355d72d1bb0802cb59582f74d12634f17a7e8b8ec5fd8 fixtures/11-random_reward/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/11-random_reward/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/11-random_reward/reference.stdout.log
|
||||
c40c79d39688c3e4f538d2197f394510b25ef6a318e667fdfae0ece3a45315d2 fixtures/11-random_reward/source-file-pins.json
|
||||
93aaedd62b47bf35bee3e3201c52851fddde077633d630e808acf97bfa995c0b fixtures/11-random_reward/stored-update-receipt.json
|
||||
ab403457fc63c968982a77efd7d6f399753dcccdff6509626af4d97cf07487a6 fixtures/11-random_reward/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/11-random_reward/validation.stderr.log
|
||||
b5f610a73a30b3bd959b540f3f1b5678e20c562b9006dd28d90c46f99be75cab fixtures/11-random_reward/validation.stdout.log
|
||||
8f81bcbfec893382cffb93402ac5322f89f27a0bfe2187cdaf2a02a701f7fb16 fixtures/12-unpaired/authority.json
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c fixtures/12-unpaired/command.json
|
||||
34f7744236017411b411953913b97d2f93cda8e49077eb52489961cb78fb99b6 fixtures/12-unpaired/fixture.json
|
||||
d3308593b3dd900cd87b3d70f1d763e28915717a1da591d6bb0e18c3ad8418ff fixtures/12-unpaired/fixture.npz
|
||||
c96a21414fffb685ad2b2d53d4b8f3e9596e551435d99a3aef075bd608f0cd67 fixtures/12-unpaired/fresh-cpu-validation.json
|
||||
ee57193b3f6474ad17ec5ac5685521e221f4fb79dbe4c5e8a5efb48ce459f303 fixtures/12-unpaired/inputs.npz
|
||||
ad8b8accece3042091dd9857acc8a668188383fc469f5c23060cfb0c93e2a02c fixtures/12-unpaired/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/12-unpaired/reference-sources.json
|
||||
7d5bc3c18d55a0473e0d1440722a649e9fc1d174499960a7488bce2cb9965014 fixtures/12-unpaired/reference-timing.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/12-unpaired/reference-update-receipt.json
|
||||
e1e6a5ea847c37973ad7918030ecd24a4c303f3b07c06bd54c6585343514e213 fixtures/12-unpaired/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/12-unpaired/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/12-unpaired/reference.stdout.log
|
||||
5b487868ddb4e1a9fe8fd341d745664aaf2092a485dc8dde4506938aeb9ab3c7 fixtures/12-unpaired/source-file-pins.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/12-unpaired/stored-update-receipt.json
|
||||
ed46a6b6702b1a618bca80f6045cbd93d25f557ecbf31e97c240d8dd53f95ace fixtures/12-unpaired/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/12-unpaired/validation.stderr.log
|
||||
0db4b969fb0a29e589b28fec3e512ab1392fd5cd8c95b821abe53d55e9b07526 fixtures/12-unpaired/validation.stdout.log
|
||||
01bc256b74fd303427aa06d05fc1750cc5440bb77b3be9e062638910d1f61c4c fixtures/13-unpaired/authority.json
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c fixtures/13-unpaired/command.json
|
||||
2812c35533dc5ce3f7fdb138168635e7ce80b84cfaa8d7cbf9602a435daf4074 fixtures/13-unpaired/fixture.json
|
||||
d3308593b3dd900cd87b3d70f1d763e28915717a1da591d6bb0e18c3ad8418ff fixtures/13-unpaired/fixture.npz
|
||||
12fa68d0ac45173871ffcd5774966c5717f0bfc3e1d7e209f021ff4aa162a648 fixtures/13-unpaired/fresh-cpu-validation.json
|
||||
ee57193b3f6474ad17ec5ac5685521e221f4fb79dbe4c5e8a5efb48ce459f303 fixtures/13-unpaired/inputs.npz
|
||||
24362f7fbada424ebdeaa908cc30699ac63d6acfcece8e43450f7d52217d122b fixtures/13-unpaired/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 fixtures/13-unpaired/reference-sources.json
|
||||
ab5697a371aa02738e3b6742f7dc44ed4f2d4f9062c16074b943f2f792bad155 fixtures/13-unpaired/reference-timing.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/13-unpaired/reference-update-receipt.json
|
||||
e1e6a5ea847c37973ad7918030ecd24a4c303f3b07c06bd54c6585343514e213 fixtures/13-unpaired/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/13-unpaired/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/13-unpaired/reference.stdout.log
|
||||
197659c8588422095e1da0a6c58a642418afcbeb0f853019400bdd5118e6784a fixtures/13-unpaired/source-file-pins.json
|
||||
46dce947920ebca0041fe77929b1d1f24d7ba8f87bdfd89d599204be826760b8 fixtures/13-unpaired/stored-update-receipt.json
|
||||
b524ebb33b92491dd2c1e1d78a758ea45d9f7afdfa36c1d06abece88dd6b0214 fixtures/13-unpaired/validation-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 fixtures/13-unpaired/validation.stderr.log
|
||||
012fe210b8db03eb760759af24d05f19ba9fe5a232d47634901f34827e5ff3ec fixtures/13-unpaired/validation.stdout.log
|
||||
481df128d39bf28e5984a6f2e5757f83d45cb7a6136f8d2843ecc0a67eca437b fixtures/manifest.json
|
||||
dda00d3eea57924cfdadf376238d28a07c88f04eb5e9253c44d9217b8a55ce3c fixtures/original-source-pins.json
|
||||
204fd74217e6f498c2f45b228e1162226cf051502429d04f8d2e10a1f309ab11 fixtures/selection.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 install-candidate-attempt-02.stderr.log
|
||||
da70074a63465cbc7f9e8d6e6eaca43b6300f869f63ceea25b1a08251c69b7a4 install-candidate-attempt-02.stdout.log
|
||||
572bfe5d57ec3c97dd6dc9985c4e8116b010fbbeb7dfd5b5fe79e4bc2c80384e install-candidate.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 install-candidate.stdout.log
|
||||
b35dd6c1f26644b688f87ce57ce03c33413d781707978a3979299654361c4fd1 integrity-after-gpu.json
|
||||
e3bb382e3b751e00090aa91d704864ba9cd623fb239f215719ad23680510b713 integrity-before-gpu.json
|
||||
1c22c3f133a18d8d18ed6beefb88f72165593492b886550668a353c753373365 jobs/export-real-01.exit.json
|
||||
138dd4fd23a0d3d0e34594478aa050dd410e18286739297067938895c7b77659 jobs/export-real-01.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/export-real-01.stderr.log
|
||||
7d16c3f01af58bded4a2b78d689ba0cc155e676dbd88a32b7e7e8f5dea69c3f6 jobs/export-real-01.stdout.log
|
||||
2eb69ff6a51b724d93fb80f439f31b3a0c84e613dd47082c4489e4ae08629c09 jobs/export-synthetic-01.exit.json
|
||||
338d241f6f21da1c7b9dc7652b258b20494aa87f88a6fe4b2fb30e82026991e1 jobs/export-synthetic-01.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/export-synthetic-01.stderr.log
|
||||
8ceb3408d2ddcdde3e007f62d9e13bf98e322d3818eb8f0395f737d2350ffe53 jobs/export-synthetic-01.stdout.log
|
||||
c29eec1b1dc9f798e1bdc466b01f17f790696a3fad1219dc8cebf28205abbff2 jobs/host-tests-01.exit.json
|
||||
236962124fb87c6b8cf871312d04b20d4a8f52ac3b3981c68a7fdace16e3da37 jobs/host-tests-01.start.json
|
||||
14d932e6256e9fbfad47cbbf6aa6479eb986584a7125e8ab21be2719ae7c2496 jobs/host-tests-01.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/host-tests-01.stdout.log
|
||||
94f122d95c52a8b7f9335c865b2c9d37d2be1bf02fde8a303d80d58e5da32def jobs/host-tests-02.exit.json
|
||||
4910b406c26fa43091ee404dd2632a810fd6ab530933e69a17d96fb7b4f57f7d jobs/host-tests-02.start.json
|
||||
0cde35a092720dec38eff7edc0c3b872663c0dd65d11822f3c52a72dcdc1fefc jobs/host-tests-02.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/host-tests-02.stdout.log
|
||||
d46f60ada1c6a869ad7ff79e17f79e1fe01c8398df9cd9dcde5d687515cc7c39 jobs/integrity-after-gpu.exit.json
|
||||
83430c5ef2c5615ce1234dab67bbb17276a75617256b6a716151d3cf8a72c2f3 jobs/integrity-after-gpu.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/integrity-after-gpu.stderr.log
|
||||
8a858236678507c28e50c884d177c59fa1a2908665f54992cca183fc86624943 jobs/integrity-after-gpu.stdout.log
|
||||
a43f4de683412d83e20523659045bb17aed3ba43571918d1babedea344da82fb jobs/integrity-before-gpu.exit.json
|
||||
1352324714e5e9cce1202373eedcebbdc4d17ff36b63feb84959312e5d60b0d6 jobs/integrity-before-gpu.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/integrity-before-gpu.stderr.log
|
||||
7f8e95d7180bc972443b09a7326088eb72aa73103c3703a463867e0771f9938a jobs/integrity-before-gpu.stdout.log
|
||||
cc3d84f8ec0e6d20fd0a3bc782b2270e84a5872c2ca04064970044ad52ee8482 jobs/rtx4090-01.exit.json
|
||||
18954abcab8bdad71944787684339fce9923f556dbfea091d81b13a3ab942ee3 jobs/rtx4090-01.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/rtx4090-01.stderr.log
|
||||
b99c5c217549ae72f2882f46a7205da9007f6541642b7e0e01954e5053372d88 jobs/rtx4090-01.stdout.log
|
||||
47ded46a1fad855509ecf5bff96c98b571611f3e10df4e1df71fa490ada1190c jobs/v100a-01.exit.json
|
||||
d69a93fd7e3aacb5b688237366487d19af64931d1067a2f909c5e87bd73ebc1a jobs/v100a-01.start.json
|
||||
a532b6e3d6e7011e3681588541da75dd0fb2f4913cc2f277e9c88c5c0f0c1fc3 jobs/v100a-01.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/v100a-01.stdout.log
|
||||
824fdba4d8fc4306a8dc48c377c34b2159587d752eebef691956df4823722c18 jobs/v100a-02.exit.json
|
||||
8835334a42e0b7fd305f6b3886d3c0e4f866c81e6377ba5b857d6aed767d0190 jobs/v100a-02.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/v100a-02.stderr.log
|
||||
6d598f73d21fef88ff9e58ca3dc85d31f3ebf9bbe33a3aaea4f608a79564f3a6 jobs/v100a-02.stdout.log
|
||||
f015698a70d1b1ba563ac31b25ca2c6d2096773217cd4702b97dcf451031f509 jobs/v100b-01.exit.json
|
||||
737007acddabee4d61626da4f91007a95033c53dde069f33ca363009a203996c jobs/v100b-01.start.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 jobs/v100b-01.stderr.log
|
||||
a74268f5e402ed4874f2b468da84bd45586a8f2931a7bb2eee80678a42c0dd5a jobs/v100b-01.stdout.log
|
||||
666e072ad4592eb528a39bb6933c048c09a6dd47ca58318bfded6a8fb6f69422 pip-install-report.json
|
||||
06c7b73058cb06a976acb62a5e6e88a2479b214e6e28d98bb793ea50197bf2e6 rtx4090-01/authority.json
|
||||
62a173c9891cfbd159d236b54785170b16bf0a4deeae487ee1e04bbbcbb7a546 rtx4090-01/fixtures--00-cs_only.json
|
||||
392cd9b4e8547e8f256e53aedecb7d570c5beff1fb180775233039c1100bfbb1 rtx4090-01/fixtures--01-cs_only.json
|
||||
29d45624a4710b1fac0bf5db3df67e0d8af48567af28d539f8dca45f09b3759f rtx4090-01/fixtures--02-d_zero.json
|
||||
b3915ce2a35795d99ff47824a932ce949ee8ac16f0afde8283c6ef3e293357dd rtx4090-01/fixtures--03-d_zero.json
|
||||
6b1310903f362ed6cef9052e70266b0b47bf8a743bf96a3e1035bacfa921e45f rtx4090-01/fixtures--04-dan_only.json
|
||||
410dfe35a7599460546f7f828b4152b94828bf90c250428ac7d2ec75ac63aa39 rtx4090-01/fixtures--05-dan_only.json
|
||||
ca257675fe44bc8cfb80813c0307b9fa8312c417cf3bbfc5820e27c035fcbcf2 rtx4090-01/fixtures--06-frozen.json
|
||||
8e2a1e17160ec4e98fd7c999487d6af9cb6bd8c0d96dce6852d88a3fe60fe1d9 rtx4090-01/fixtures--07-frozen.json
|
||||
0a5098376d5debb76af8e27d4404816c50545e0c8a158282d1d56465416a4ac2 rtx4090-01/fixtures--08-paired.json
|
||||
19ac2720c3ccac3819eceffae745710c3698ed090a879cd42f59d62471fd5d71 rtx4090-01/fixtures--09-paired.json
|
||||
55dd2071b19e4fd39680d5db2fdba7884033754b054e0a89440e09e346863de0 rtx4090-01/fixtures--10-random_reward.json
|
||||
9f72359d9526047c7842e5428a1092e7bec96905a8b02269490a999add75a296 rtx4090-01/fixtures--11-random_reward.json
|
||||
5bd5e68710774c575fbb2fb9cae6b72faff2c292b198560b1857b3bc36e858a9 rtx4090-01/fixtures--12-unpaired.json
|
||||
03a10ccc4006346b8e7d6404963d26f6eded2af48aa292962c3ef7dccf06d727 rtx4090-01/fixtures--13-unpaired.json
|
||||
d06c602fc1950f1f63f7b79e98e3fbeef2a291811c91fc7ffdaab5acfd9ea3f4 rtx4090-01/invalid-input-rejections.json
|
||||
377cb655e5b6e5816ccca3b5a03c481021afc3da64879af9be72c207e88639c7 rtx4090-01/summary.json
|
||||
810b8abe7145f7dc19bf34707a5169b480a3dfc4cfd02d8f5b3c8bf0c38cad98 rtx4090-01/synthetic--00-empty-us900.json
|
||||
38dca8b89791113c5e9efa7f27e91614bc4894620ae26801c6951a043a0e406a rtx4090-01/synthetic--01-non-kc-only.json
|
||||
213056b418992bf44112b2ebd6ecce755e62923496ad52e69b3d7ff9cbec079b rtx4090-01/synthetic--02-no-us-mixed.json
|
||||
bd7a8c8f9482b29c91a0579c8d2b642e975a1a24b3ad7ad8432ef7c217a83010 rtx4090-01/synthetic--03-us-first-tick.json
|
||||
1eca5ac08300083f71022aaeaf1d1acee8c79481fea0c0a01dd453965f1f7dca rtx4090-01/synthetic--04-us-final-tick.json
|
||||
e18bed6dc301d969b37b15d3478afeb919da7d503373f5010200eecde669c555 rtx4090-01/synthetic--05-before-on-after-us900.json
|
||||
56b3085d4cceaf9dc2ae720f82ba9a63b105c943fc84fd20321bffd9070eee15 rtx4090-01/synthetic--06-d-zero-existing-delta.json
|
||||
7c85511eb4ffd833824a1d8a65f30aa1cd651c247008987d23492e7e5f4be4c7 rtx4090-01/synthetic--07-frozen-existing-delta.json
|
||||
00f7eb4f9857c078e755d88ae7f4ebb067c279ace1fde074f2e30f6cb9d7c24e rtx4090-01/synthetic--08-compartment-0.json
|
||||
be8d410ca8a05661da851e981d5f18d84c09c08cf6d01beaa2cd62ed43805a67 rtx4090-01/synthetic--09-compartment-1.json
|
||||
dfbf57fc6a4259a5a0bd18d33f81d26b91976e39d6960b31be63c0008f008213 rtx4090-01/synthetic--10-compartment-2.json
|
||||
cd145d7bf7ce147043f0b401cdeea67c63a8ae45e130e4c6d71056c0250fbe08 rtx4090-01/synthetic--11-compartment-3.json
|
||||
f14e69b5293cb81cdc2cf6f4d895372acfdee80954c6ff3b29031abb536e00d3 rtx4090-01/synthetic--12-already-at-floor.json
|
||||
779a4d8111fa64524958e923f75c0d6076ccf6262b9ed67e99cedc16c7afd09a rtx4090-01/synthetic--13-one-ulp-above-floor.json
|
||||
71d98467108c65e9e8c4a2fb13a7c755bba733aa346f3fb77eec14ac12ee5c14 rtx4090-01/synthetic--14-seeded-sparse-717.json
|
||||
6f082a0715e8c2af13573b508bb272ac0413c4ccda3b2aa3cb079b1f143b95a8 rtx4090-01/synthetic--15-seeded-sparse-20261001.json
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/00-empty-us900/command.json
|
||||
511508f571c29e01cc9b52b012195aa6b2443854c6edeeb415323d5e28cb17cb synthetic/00-empty-us900/fixture.json
|
||||
9a289591eda1c68ff8ae704b484f2437a7b290dd3f9dc56195b233f00c4e5344 synthetic/00-empty-us900/fixture.npz
|
||||
85e6aa97b72c7a8cfaca125d6772395d9f2d53f8627569c26c5d38fde7d5609d synthetic/00-empty-us900/inputs.npz
|
||||
05957f0944ba8edacbe4335ac2d944a11570adb2eaa26bd81d221bc8a073f964 synthetic/00-empty-us900/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/00-empty-us900/reference-sources.json
|
||||
55e17e61d8c1da77906844dd7a58ac347d91e0420c7388cb1a8e35d3536b1c66 synthetic/00-empty-us900/reference-timing.json
|
||||
51cca308034c90e648311bc449d07210d6cce4c37779219c87571578af9d864a synthetic/00-empty-us900/reference-update-receipt.json
|
||||
e1e6a5ea847c37973ad7918030ecd24a4c303f3b07c06bd54c6585343514e213 synthetic/00-empty-us900/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/00-empty-us900/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/00-empty-us900/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/01-non-kc-only/command.json
|
||||
d39cbc1610bf09a1431c2b59fcae0d271e7c21e8b41f95494d3b15b08dd215e9 synthetic/01-non-kc-only/fixture.json
|
||||
f0cf6ac6a9218d3e470f8f7570214c188eea8d8863461a03e9bb7388791da22d synthetic/01-non-kc-only/fixture.npz
|
||||
5560a2a7382ac6e45de8d129079763cf8f074062e5aae188a5742f5151b6c99e synthetic/01-non-kc-only/inputs.npz
|
||||
9b6b8185a64eaa8fbfd73456479605ae4a1359d9f5dc28d9691eeef3d9f45d8b synthetic/01-non-kc-only/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/01-non-kc-only/reference-sources.json
|
||||
70a43186e9d1c23f0ec76ebadd7c9b3ccbf273c3cf572e65ae3f8e5a568fa7d8 synthetic/01-non-kc-only/reference-timing.json
|
||||
21de55c0c71087fffe5c4f87b20ce5ee1c5119c07f60ddccee1b939ba65a9367 synthetic/01-non-kc-only/reference-update-receipt.json
|
||||
e1e6a5ea847c37973ad7918030ecd24a4c303f3b07c06bd54c6585343514e213 synthetic/01-non-kc-only/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/01-non-kc-only/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/01-non-kc-only/reference.stdout.log
|
||||
eb98ecda2554a459c199b2ca238a79df8e323da37f039f939cfb64c4709cbe91 synthetic/02-no-us-mixed/command.json
|
||||
7fc01d5f06cf3306c828997573fc97e7cfde4959a820d45ec95e13ce8d26a3f0 synthetic/02-no-us-mixed/fixture.json
|
||||
7ba6cba3abaa7c1ce89380722f471bd7516650efd16ee685a199b0dc9a81312d synthetic/02-no-us-mixed/fixture.npz
|
||||
6a0bcfa9cd11236e2cd3160f343e24725b6cdeac1121d8ef119194c24557f031 synthetic/02-no-us-mixed/inputs.npz
|
||||
0b3ab40391034acb03a142a0b731870ac046d1314520a6d6843eaa2794495a9b synthetic/02-no-us-mixed/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/02-no-us-mixed/reference-sources.json
|
||||
c4356ea8a998303b3d1ff02e6e548550f02178d73e254096d03a0a9d69f27ef3 synthetic/02-no-us-mixed/reference-timing.json
|
||||
6fe439df410bc3b43d613b5bf09cc3617ed34e1ab1411e7a26e57a5de5730273 synthetic/02-no-us-mixed/reference-update-receipt.json
|
||||
701ad21f5e762c8c3e619d001b6d1941262441d83e31255e1f7f2bb4a0b6ef30 synthetic/02-no-us-mixed/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/02-no-us-mixed/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/02-no-us-mixed/reference.stdout.log
|
||||
6131b2db05c0e76d7667ec0788c069a307479fa7d64abb4448caa9ab8b26199d synthetic/03-us-first-tick/command.json
|
||||
e3b04e52cbce0182d2adfcd989976cd46fc3942b4aff2b147a1971798f52c788 synthetic/03-us-first-tick/fixture.json
|
||||
e643d7ef1c9dc9177db35aedc254165feb6a0829aafc36858504e290df7182f8 synthetic/03-us-first-tick/fixture.npz
|
||||
677a5b156a06a73c4c165193b601df49c8de3141b2d0727df74ade3aad471ae9 synthetic/03-us-first-tick/inputs.npz
|
||||
c50311e064c535f8c60dcaa92213e5447d5770c6fef199aea43ed0fda59811d0 synthetic/03-us-first-tick/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/03-us-first-tick/reference-sources.json
|
||||
56231139ced0455cb1328973218265980ce82c013a46bf09b24624b97c9d1d25 synthetic/03-us-first-tick/reference-timing.json
|
||||
5520acd45f8d0a1820be7278d10f82bc50650b1b2836bcde7e418037309bc5a9 synthetic/03-us-first-tick/reference-update-receipt.json
|
||||
1c15f393e3791d5f0398af980d5eb447613066ede583bef29ef9a0da90014884 synthetic/03-us-first-tick/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/03-us-first-tick/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/03-us-first-tick/reference.stdout.log
|
||||
6d393eae689c30f60a7ca2acc535662ca0f65622a6bb680e93cfc72a2d86dc20 synthetic/04-us-final-tick/command.json
|
||||
98e785ccbd8fca8c7f62895f6af77200e836e60df0c9a3d8e4006dc99b15f9cd synthetic/04-us-final-tick/fixture.json
|
||||
7aba2418b1fdeab69c5ef40824ae09335308245e7cda15bbe8a54ff27343531d synthetic/04-us-final-tick/fixture.npz
|
||||
677a5b156a06a73c4c165193b601df49c8de3141b2d0727df74ade3aad471ae9 synthetic/04-us-final-tick/inputs.npz
|
||||
b58dc9fe89b8f35fbeb2d0e102ad26ccf03f09d0189ba27a85abd904a070c2b9 synthetic/04-us-final-tick/multiple-reference-process.json
|
||||
4839dadc4e59a259a513b1e4b5ddb7c0592d67431d8d9e55f98ba7b16aecc262 synthetic/04-us-final-tick/multiple-reference.json
|
||||
74ad903e255b1c994b54b9ce40aab028834767f108642fdb79c040b8962c3624 synthetic/04-us-final-tick/multiple-reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/04-us-final-tick/multiple-reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/04-us-final-tick/multiple-reference.stdout.log
|
||||
559e4a243cd5e1733829a1b2856df41c2bdb4365c7b8e077da434ceeee51ab0b synthetic/04-us-final-tick/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/04-us-final-tick/reference-sources.json
|
||||
0418611a857f0574ea38f1560baf98208064b89d3d6ec3a05dfc1b41ff0cf9ed synthetic/04-us-final-tick/reference-timing.json
|
||||
2c5069f28c0b76ea44461bddccdd9f96438ed835d764fece406b576ab0a4cba4 synthetic/04-us-final-tick/reference-update-receipt.json
|
||||
313840cc5c2b254af78dfe6a4adb99966ab7df9def81981325b55b0dc894904f synthetic/04-us-final-tick/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/04-us-final-tick/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/04-us-final-tick/reference.stdout.log
|
||||
e4c982051bb849815a2b83181be97b53e1859907b991b95bfd4690697af39807 synthetic/04-us-final-tick/trace-command-steps.json
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/05-before-on-after-us900/command.json
|
||||
95779e30e1def183be4f5a1d7f5ad5bd9673cf799b00b8c240959f4cea0bee91 synthetic/05-before-on-after-us900/fixture.json
|
||||
fbb07f9350e6c84d994522cc651d20492ec7aca7ce9906821a6964133bd4fdd8 synthetic/05-before-on-after-us900/fixture.npz
|
||||
6a0bcfa9cd11236e2cd3160f343e24725b6cdeac1121d8ef119194c24557f031 synthetic/05-before-on-after-us900/inputs.npz
|
||||
c89ac59e5aebba6052a02660291bb5f549c7ad2b887ce78996839067862a9bf8 synthetic/05-before-on-after-us900/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/05-before-on-after-us900/reference-sources.json
|
||||
a6ecd56b2355683dffc0ce461fd71c5917e8509fa861057fa7023ea56bbbed5c synthetic/05-before-on-after-us900/reference-timing.json
|
||||
6b460f343303a080ff5f93986ec73af67241a0c8a34ce98de2095235885b2acb synthetic/05-before-on-after-us900/reference-update-receipt.json
|
||||
aa7405dfd95c772c2a4c1516e359e44da227cd023cb2c0a7c7bc8c6e94a97f57 synthetic/05-before-on-after-us900/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/05-before-on-after-us900/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/05-before-on-after-us900/reference.stdout.log
|
||||
8d0528b432de998d651df7862a6e7f729c6510326cfe2091dbe2f39b68b6bcd9 synthetic/06-d-zero-existing-delta/command.json
|
||||
508c304d4d9906ae8d86b9fc5999f0a0988eb9f97fe96e2556a788718d27ac85 synthetic/06-d-zero-existing-delta/fixture.json
|
||||
aee196d0f3135489bcdb44fd8038c0db3fa55899e4347ba41aee009364cad09e synthetic/06-d-zero-existing-delta/fixture.npz
|
||||
d7a9d21490ba1d1ab802c7c427d21637e72bd2450e22a91bf67a481af0dde669 synthetic/06-d-zero-existing-delta/inputs.npz
|
||||
9b275e432ca51466d423094a2faf4dcea98e9f33c03debe0720b34b351744590 synthetic/06-d-zero-existing-delta/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/06-d-zero-existing-delta/reference-sources.json
|
||||
dbb3fcf28f9d8761fe94bccd8f4908501fc7bf8baa9b78c1513bcf8be64f967e synthetic/06-d-zero-existing-delta/reference-timing.json
|
||||
8aada5cac82c95961b6d362c5aea987ba759693d7ca27ef211c85160dd8a95cc synthetic/06-d-zero-existing-delta/reference-update-receipt.json
|
||||
8a95cd87fb05348436bf3b95b8487b7b963fd5b849f0467dd61a2efea4ae5ead synthetic/06-d-zero-existing-delta/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/06-d-zero-existing-delta/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/06-d-zero-existing-delta/reference.stdout.log
|
||||
ea2a1c748b5f5494e493135032a13ac76f5827c35903b6c99ea2bdc43edf5591 synthetic/07-frozen-existing-delta/command.json
|
||||
c59e94d8ea6e9beb5a14a1ba71ca5c1a0baed949c049c7d0db3445a1917811e3 synthetic/07-frozen-existing-delta/fixture.json
|
||||
aee196d0f3135489bcdb44fd8038c0db3fa55899e4347ba41aee009364cad09e synthetic/07-frozen-existing-delta/fixture.npz
|
||||
d7a9d21490ba1d1ab802c7c427d21637e72bd2450e22a91bf67a481af0dde669 synthetic/07-frozen-existing-delta/inputs.npz
|
||||
9ed1abb56c1a731ecf7f3c8aeb127d097854826e2630fbc072b07889f557cf35 synthetic/07-frozen-existing-delta/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/07-frozen-existing-delta/reference-sources.json
|
||||
4ea633afbe7358274d22b6ca984914274a70a77f8c96fab4ce840a804f366264 synthetic/07-frozen-existing-delta/reference-timing.json
|
||||
edc7ef799e27f254a0781cdff6062c2900b87618d7d11b3697f5433c0a20b468 synthetic/07-frozen-existing-delta/reference-update-receipt.json
|
||||
8a95cd87fb05348436bf3b95b8487b7b963fd5b849f0467dd61a2efea4ae5ead synthetic/07-frozen-existing-delta/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/07-frozen-existing-delta/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/07-frozen-existing-delta/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/08-compartment-0/command.json
|
||||
acef4efe1569358a4d68859ebe625c76e3490a85f8ae60d32ac9e8e1e9f0b658 synthetic/08-compartment-0/fixture.json
|
||||
13593e4495c227a371255cff31806f3e17e6561fa22d89ba81dcd22963e85648 synthetic/08-compartment-0/fixture.npz
|
||||
9b9298ca0f81f15feebba2773e59cbbdc848d3d41ec8be8bce00dc0856198389 synthetic/08-compartment-0/inputs.npz
|
||||
ba92ef45a2782dd349cc10028fd562038005c9adb9cf1070850584e732d95772 synthetic/08-compartment-0/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/08-compartment-0/reference-sources.json
|
||||
c83aa21eadf447f3e9881d6b387e933151384a4d1c94e9313efd7db7e61e4be5 synthetic/08-compartment-0/reference-timing.json
|
||||
b9c0f63144fc16e292b8cff2ded3bcbcd7893bd387d62aedeeaf37265c8b3cab synthetic/08-compartment-0/reference-update-receipt.json
|
||||
7a4283d73e202db93a145b10c4f34edf62497938ca1044829b9ca0ce0f5d3619 synthetic/08-compartment-0/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/08-compartment-0/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/08-compartment-0/reference.stdout.log
|
||||
29fb25fa7b54889eaf9668bd5ec5313603da1d05e4ac57da30adf110f78ca058 synthetic/09-compartment-1/command.json
|
||||
8117aafd691419706307280f19dde57d6ceff4ab28b2a82141582bc7bc72d382 synthetic/09-compartment-1/fixture.json
|
||||
6a456ba8f13ac8beca8a94ec9de074ad1dbaceeeb483b0da58239006e793ab67 synthetic/09-compartment-1/fixture.npz
|
||||
9b9298ca0f81f15feebba2773e59cbbdc848d3d41ec8be8bce00dc0856198389 synthetic/09-compartment-1/inputs.npz
|
||||
bc2e4d67284c003d12437833a8a28d63d30b5476535ab15e34df2b7572329013 synthetic/09-compartment-1/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/09-compartment-1/reference-sources.json
|
||||
f9b166aa904097a388eb944476a6514dc041e072968ad700fc2de31a407469e0 synthetic/09-compartment-1/reference-timing.json
|
||||
20a7a3a02d9d8055314e65c7f09de488798b394b0033af7e155deb9978316255 synthetic/09-compartment-1/reference-update-receipt.json
|
||||
fdc015e6299bbc718810406b3df7b1fafac8d6eb41acb8e52b0a2fa456da8b5f synthetic/09-compartment-1/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/09-compartment-1/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/09-compartment-1/reference.stdout.log
|
||||
5cb3364f3b8be8aa85a35936296ac74b780002a6ecc9b8e0d73067b0f16a0e1b synthetic/10-compartment-2/command.json
|
||||
957cc144442a06a83500d076643fd51542d33c422384b64c030e16ad712a3d39 synthetic/10-compartment-2/fixture.json
|
||||
3cdf931bdbeec427ca09ab594dd34cdde9c04db6f85b1858c96a71c09f7e8891 synthetic/10-compartment-2/fixture.npz
|
||||
9b9298ca0f81f15feebba2773e59cbbdc848d3d41ec8be8bce00dc0856198389 synthetic/10-compartment-2/inputs.npz
|
||||
3c7b4d64f012d3ea2e3573da375526ff483112c9f10f261830daaa97430f3d51 synthetic/10-compartment-2/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/10-compartment-2/reference-sources.json
|
||||
6aa3d830a790352f12c683e93d53ab3039f53d65758f4766e582b94cbfe9d5c6 synthetic/10-compartment-2/reference-timing.json
|
||||
f9a90882ff074748465e285b13a0a89d1f486bb1a72dac11cfe133915b026915 synthetic/10-compartment-2/reference-update-receipt.json
|
||||
8f32636d547cf8c616778cf7f77387a08f8d8f786b0d402ba70df932779f9451 synthetic/10-compartment-2/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/10-compartment-2/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/10-compartment-2/reference.stdout.log
|
||||
5f54ab41b5a3e4bd77808e88b336bf5114653fa89ff7e1b17317f3318029070c synthetic/11-compartment-3/command.json
|
||||
493b451b25f3a9736cf687b7a10787b2838f52b600e00253e4cd0e573dae2ea5 synthetic/11-compartment-3/fixture.json
|
||||
2604e203e2fdac9a7638a37caa643f2da61a0cc4720a7d521b211bc87d9e8f49 synthetic/11-compartment-3/fixture.npz
|
||||
9b9298ca0f81f15feebba2773e59cbbdc848d3d41ec8be8bce00dc0856198389 synthetic/11-compartment-3/inputs.npz
|
||||
34b48bc690c285b75e6450c259cf4975d1f0981d0cff1197648a0f3ee87f0200 synthetic/11-compartment-3/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/11-compartment-3/reference-sources.json
|
||||
df6ef026e2a89c3a59e1fb1607b6a611277f4b8ebade80d5d7e97de7449ea89a synthetic/11-compartment-3/reference-timing.json
|
||||
6732aa221d4a880f56de1868b7654c884a0d26b908366804116de302192495a8 synthetic/11-compartment-3/reference-update-receipt.json
|
||||
67b25ae8d66f6e395273f5474339aab69269c37261d837a933330f942c6243dd synthetic/11-compartment-3/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/11-compartment-3/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/11-compartment-3/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/12-already-at-floor/command.json
|
||||
e7d09dcf325b47ee08371645941640a2abacad4777591791d3a2cb0dbfd1bae2 synthetic/12-already-at-floor/fixture.json
|
||||
b4c0f8106381eaa83a6042e703be369ba4e1821e9b6ac4053882a1064d3cfcaf synthetic/12-already-at-floor/fixture.npz
|
||||
5a1258fe9844b716f33c4ecdbc595bf4b436956476954ddd4cde8d4310509474 synthetic/12-already-at-floor/inputs.npz
|
||||
854d3eba812535bd0810321329402e178c2abb703b846d94dbeae5dffa793edd synthetic/12-already-at-floor/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/12-already-at-floor/reference-sources.json
|
||||
cd11a55c130b9698553086cf055dab83358bf8ab8f228bd6bec6165954d7cec3 synthetic/12-already-at-floor/reference-timing.json
|
||||
de44bbf4a1337f45f9e4efcd8a273da1a7d0fdcf30b0efdd030d9bfa7e316ef4 synthetic/12-already-at-floor/reference-update-receipt.json
|
||||
8a1db1b6202ab37e493fffd7317d35060e573d69971b1784227b908fed5e2189 synthetic/12-already-at-floor/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/12-already-at-floor/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/12-already-at-floor/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/13-one-ulp-above-floor/command.json
|
||||
eef1d36daabc3c62903a8a37c7d97d9fab151093b0e8ce414657d0025d616d56 synthetic/13-one-ulp-above-floor/fixture.json
|
||||
f026e6530cb4965b1c290f93aeb9448ac25c0b664e26efac150f9123c22d9999 synthetic/13-one-ulp-above-floor/fixture.npz
|
||||
8187c2e9523a02c81e3815e5ab339a69a9f7c5ac5dad94769240d195e99601db synthetic/13-one-ulp-above-floor/inputs.npz
|
||||
44f428a36acc735ff46fcd58ab86bd1fa45202666f10a2e6a55ffbfea91dbec9 synthetic/13-one-ulp-above-floor/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/13-one-ulp-above-floor/reference-sources.json
|
||||
9b82a4656d3fe3d36ce601881ee01ad8138be065c838e049b172a226c9e7811b synthetic/13-one-ulp-above-floor/reference-timing.json
|
||||
3d1ea8d98acacc80c6ab9b060edf6a7e61900e14edeb9f4c2d1ccfb1eedf8677 synthetic/13-one-ulp-above-floor/reference-update-receipt.json
|
||||
2288a2514901e2ba4a40f0e474ba93f6fe0358949eb07b7c192bbd1abf103a9d synthetic/13-one-ulp-above-floor/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/13-one-ulp-above-floor/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/13-one-ulp-above-floor/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/14-seeded-sparse-717/command.json
|
||||
d06599fccf25b62dadaec05439cc371ae879bd863ea65fd0d11f7330b1c14aba synthetic/14-seeded-sparse-717/fixture.json
|
||||
da53fa054834070a2dce17d33589d6affea01a1d14d53734d9022f4dca0e0243 synthetic/14-seeded-sparse-717/fixture.npz
|
||||
61c6cc8e7fe97b845a99665669631a88061087cab107a4b0ed6bdd76ac1b23e6 synthetic/14-seeded-sparse-717/inputs.npz
|
||||
c1d74e401b7cb9c1b69b703e91e7dc1e7902e1d43fe021717aeb2055ea6f4dda synthetic/14-seeded-sparse-717/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/14-seeded-sparse-717/reference-sources.json
|
||||
dc359baaabaaa5b5c3938e382e78b259544fd9fa12023a84d4d40c9f595b5e50 synthetic/14-seeded-sparse-717/reference-timing.json
|
||||
f0d80b1b90dae1eeac376d31e18dee7adf99c77b592f90543e87c80d35d24223 synthetic/14-seeded-sparse-717/reference-update-receipt.json
|
||||
ad0b806eb7af62b97c118bf6d9930d34560b2940a3a8094ca7937628a5450427 synthetic/14-seeded-sparse-717/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/14-seeded-sparse-717/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/14-seeded-sparse-717/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/15-seeded-sparse-20261001/command.json
|
||||
6b8556a227c4d59be17ca5df9452298f83788c0d508683884d8d98d5087c8f07 synthetic/15-seeded-sparse-20261001/fixture.json
|
||||
490f4a9077eb391075d7ab2d815e578b099f5a8dc369cea60b83dceee7a537b9 synthetic/15-seeded-sparse-20261001/fixture.npz
|
||||
12326122901b8c4fe0e3681a60c9bb20547e96df5f194b0aab9b791689547ae4 synthetic/15-seeded-sparse-20261001/inputs.npz
|
||||
7f0272f7ae6991d2e26384b0d0f904a4e0f7c0af6035f856a040451e1fa3a417 synthetic/15-seeded-sparse-20261001/reference-process.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/15-seeded-sparse-20261001/reference-sources.json
|
||||
8bb52188b8ade787d9e6ffd6c431fc195649ee3f3eb82e5b41fe4d7c9d33f744 synthetic/15-seeded-sparse-20261001/reference-timing.json
|
||||
e7c84ab8a4e778c0188b8ce5cfc12e22a31b07ff3e8a2d9e09dc4f53c43eb6f6 synthetic/15-seeded-sparse-20261001/reference-update-receipt.json
|
||||
0f08302f390afa422aedd5a21523782a7e5f81ba3de6f9337335d84b726b4426 synthetic/15-seeded-sparse-20261001/reference.npz
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/15-seeded-sparse-20261001/reference.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/15-seeded-sparse-20261001/reference.stdout.log
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/invalid/00-duplicate-events.json
|
||||
a140bc2aa043601cc23bfee61789612c6d4980ae936e6634bb21fa7240238592 synthetic/invalid/00-duplicate-events.npz
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/invalid/01-unsorted-events.json
|
||||
381b2cb091178ecc04fbdc8d126fb8923af7c9b47c2ce0120f9fd8340529354e synthetic/invalid/01-unsorted-events.npz
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/invalid/02-out-of-range-tick.json
|
||||
4df43f8a5997243dcaa6fcba79232f89d73a8f7b1beabb2c6b0e72d309101280 synthetic/invalid/02-out-of-range-tick.npz
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/invalid/03-negative-zero-delta.json
|
||||
7e703ae325ad566b7587a41f92199dd2ad4259a48445d46dc04a482489666f8d synthetic/invalid/03-negative-zero-delta.npz
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/invalid/04-non-kc-candidate-source.json
|
||||
44ce0f662887c09ea595625d7559b408c46844e9d6831163ce18388a56365651 synthetic/invalid/04-non-kc-candidate-source.npz
|
||||
b35e3641470bbe1d8d208b93bddd9d74ecd2e48e3bd0c73ce53e1a6f2bf32a3e synthetic/invalid/05-unsorted-kc.json
|
||||
969014364818757800193802297221c3ca2769d2abf9617a4cd3da6f6ace3d53 synthetic/invalid/05-unsorted-kc.npz
|
||||
6d7c2dce81d6a4d8382ae846f947d1978a388a277241c29076203f0c92211eb0 synthetic/invalid/invalid-selection.json
|
||||
4542ec5a5ddf28f2c72fbeabf22cbee170fdd4a5a1db886738d5e469c008231a synthetic/invalid/original-rejection-process.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/invalid/original-rejection.stderr.log
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 synthetic/invalid/original-rejection.stdout.log
|
||||
780f4b54868527db6e074f55e6da9fe712c06b03926ab431561db53a513855ed synthetic/invalid/original-rejections.json
|
||||
df5b094bd8d43b0705637dafdc3091b1e98e4c6bc331fed6279b6662e883f157 synthetic/invalid/reference-sources.json
|
||||
8dd58cb8ac90040ef0b9c747b2225fa7c0f905ce6f5dd4042aef457d6b1e213d synthetic/manifest.json
|
||||
6bdd7589b203aaf0ec4e112657f538dd8bfe6b68d0e871af7e44bdaf2ae8e358 synthetic/selection.json
|
||||
5000b9ed536ab7cbed1da8622d728410135d3543faa9ae5f517d348d9dc12774 synthetic/template-binding.json
|
||||
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 upgrade-candidate-pip.stderr.log
|
||||
c99ae4b96c48cb984b85f7897c6ff7e5ac9896fbbb62cbab17551254e058c082 upgrade-candidate-pip.stdout.log
|
||||
b966ace3825626c4b7f450f0a8f6489794b67af39c6ce878bb6546da7db45d1a upload-location-copies/export_fixtures.py
|
||||
15c46f3cbd7e4c5cf1b889150c2d142842e867af8a961dce2fe3537207999a99 upload-location-copies/launch_job.py
|
||||
68ea78f61408fc799a8f08fa644120660cac36b9920df1c91a0b6b57692ea58a upload-location-copies/test_export_fixtures.py
|
||||
3fb541a53d69399e03bda0af8e02360f6e1d0471d8fdd35b6473435e0c71e95c v100a-01/authority.json
|
||||
c20f28de4aefb3d08aa9f75699d34d620dd5097fe99c6b1b8297a3359e1e49c6 v100a-01/failure.json
|
||||
88803dac0aba8ae4d190e6582ac142a9eb7499c6f0f6d4794b336f0bcd8732fc v100a-02/authority.json
|
||||
5593a3b06be42553cff08c9c219953efd33cdb6f21ae7c573d592b4d10139635 v100a-02/fixtures--00-cs_only.json
|
||||
ce484754b351f96e453b45f42f2686b7e7165ce7ff5ab9b175dd1120c7264db0 v100a-02/fixtures--01-cs_only.json
|
||||
efe694f3b3f712aa25019b2b5d57f369a684909f0e0e7c14040297362b746aa2 v100a-02/fixtures--02-d_zero.json
|
||||
0513bbc6b466e9bc5b28637e8758f6a74bdb0abb6995f0b258649376a270dba8 v100a-02/fixtures--03-d_zero.json
|
||||
b0c9eeeb6624c815dc44052137eb269389a4d18bdac86bcc52a85347a6398f9a v100a-02/fixtures--04-dan_only.json
|
||||
dec6238ff5936c95208793dfc61cd11ac044db9f99102fcc78b1a9cf27d5a49e v100a-02/fixtures--05-dan_only.json
|
||||
c0508088d8d9a52fb6872f9057315eec312f37631f163917a8aa168847671b43 v100a-02/fixtures--06-frozen.json
|
||||
5eb1b1cd764ab0349d7336f91040878912a8bd7fc01fabfa363fe9a600527fe0 v100a-02/fixtures--07-frozen.json
|
||||
705ae0a21c3f0e364d8e0d4314920becee92524e64ef46bf3e7becf0d5d0d271 v100a-02/fixtures--08-paired.json
|
||||
6035b5551465850eb413a26fd1fc68e5b572b083fe5bb0d5f9f39eaa796a9544 v100a-02/fixtures--09-paired.json
|
||||
85ee73e7d0b15d0f37fd651d3c3cfe683559a4a03ddf4d8f71638dac382d85d4 v100a-02/fixtures--10-random_reward.json
|
||||
a3503de7e99edd5215b241184375748e68f9e62e487c50d97e640ff0b6f272b8 v100a-02/fixtures--11-random_reward.json
|
||||
c3f160b79dbd81e3ef2032ead3075e401769c12940161e5fa077b20a81ab26a2 v100a-02/fixtures--12-unpaired.json
|
||||
4383c2d5fede73b899bf93ea902ba7606b2ae9ac8244554e8feb86e7b51ec797 v100a-02/fixtures--13-unpaired.json
|
||||
d06c602fc1950f1f63f7b79e98e3fbeef2a291811c91fc7ffdaab5acfd9ea3f4 v100a-02/invalid-input-rejections.json
|
||||
221095febd8af92e5aba4663c82da8826578d7480b5bea9e08c008972986b164 v100a-02/summary.json
|
||||
e81efce736479c5c8af66ed284887b6f56f0cbf6e63991be7340406ca27c1d7f v100a-02/synthetic--00-empty-us900.json
|
||||
91e42ae01d7bf35a378418c55c10395b3f1f5dfe6e65f56b5882f19a164bc520 v100a-02/synthetic--01-non-kc-only.json
|
||||
cdcc411aedf73b30bb76425ace04f4cc634f7e60e5284b7e62104bafc3282f5c v100a-02/synthetic--02-no-us-mixed.json
|
||||
696599852b8b06c53614c8bc561bcae1fdcecef3d9f5c1a3702a7065c157db82 v100a-02/synthetic--03-us-first-tick.json
|
||||
cd2e079e7ef0b2e59056f4f57dc0cdaa0e37e969a516e3da5b0774864a6c86bb v100a-02/synthetic--04-us-final-tick.json
|
||||
292a576dab1f516f853cd61401689363688cb19c668ad6de2a8ab2d1a14bc08c v100a-02/synthetic--05-before-on-after-us900.json
|
||||
f377a37d6a92d1d04942eeb7401a186086fa6e83394f291bef13ea8ed43afdd3 v100a-02/synthetic--06-d-zero-existing-delta.json
|
||||
e649e330f5f949466ab100e269f2bc775f20373e711ff0deedf35c3410fda527 v100a-02/synthetic--07-frozen-existing-delta.json
|
||||
2764345af2d74bc4471012595613fc685aaeab206864e92c14273f7b62109a6b v100a-02/synthetic--08-compartment-0.json
|
||||
59fcb0ddc9632392859126c0a32026df8b549c3a0135c38c30749424bf5ac42a v100a-02/synthetic--09-compartment-1.json
|
||||
8fe48a6458c343a484731ac557069d82cdce0658bcfd3fc76ffbbcd2df81fd17 v100a-02/synthetic--10-compartment-2.json
|
||||
4b1667dfd7eece57a98e7217f25837084622d24408c10904044a54c3f3c392c1 v100a-02/synthetic--11-compartment-3.json
|
||||
af893b9f83a29be3481eb37d052d224f1a57a5ab9f1cc5e6b1915f26129b17a6 v100a-02/synthetic--12-already-at-floor.json
|
||||
37c18dbc87865f4e56731298e9c46268f3980f20e6af8a365f5d07ef14e0e1dc v100a-02/synthetic--13-one-ulp-above-floor.json
|
||||
c1df69852fdcb21e06f733b965b0ed810fda06d6500ddb454a0b5e26fab37ba7 v100a-02/synthetic--14-seeded-sparse-717.json
|
||||
b92d52939eb56b79c630af5088990f669422af2f3aaac358ebb66a72336538fd v100a-02/synthetic--15-seeded-sparse-20261001.json
|
||||
64cb0be8d51813d6415fd650936dc4763f408ebe103c0c552b707afbb5e2dc1f v100b-01/authority.json
|
||||
724bcb80d05bca9bc15b42cbaba2838ba5fbb1445400f8c5085febb2d71591a9 v100b-01/fixtures--00-cs_only.json
|
||||
a9f96c0493301d603dbdaab5a52fbe069c9f51f164ee11007db897e2af387ff1 v100b-01/fixtures--01-cs_only.json
|
||||
fe5c0069357004aeb18304b3b4e6e987aaf4e206479cd9f7315829f0ebcf12ef v100b-01/fixtures--02-d_zero.json
|
||||
78fc226e1d4c7baaf3d3fd005344e6d9589df71cfec8e540c0aa2f196e5c0fbc v100b-01/fixtures--03-d_zero.json
|
||||
058b7f31e3c381232cd505bebc4af2d4b3edf6f508172daf32b11f4cb4cbb32e v100b-01/fixtures--04-dan_only.json
|
||||
0098aadabd51941d24383fc28770191709ecf28970b9118b0584d90a8de08e60 v100b-01/fixtures--05-dan_only.json
|
||||
d735f73a811bf2329d89bb5bc9b790d5c97f7fb955d97c5f7cc4583f3da66b62 v100b-01/fixtures--06-frozen.json
|
||||
9ce5dd746d0bce1b76b61254f38a6c11cd142a4e3c5c392a23119923d4d6d405 v100b-01/fixtures--07-frozen.json
|
||||
7d0023c2493cc6237dfe5c4afaf4f09cd599b7d8203506f031a9829cf34f82df v100b-01/fixtures--08-paired.json
|
||||
fc8f9d8b7d65ddf5091a996775750391401e6c39ca0bba1ae72c85d0f93312c2 v100b-01/fixtures--09-paired.json
|
||||
5b94b2a06012f4fe1d8c5a9dc1afa8f84599f437050c90195698b46fe9cbc6ea v100b-01/fixtures--10-random_reward.json
|
||||
49a03a0c4083013a12150a2e5e8183fdd07dc52aa86cebc0202878238723560e v100b-01/fixtures--11-random_reward.json
|
||||
8bb0190a0d8127a98e2a2ab666bd0088d2e980ec551dcada3c19f36c4aef25c7 v100b-01/fixtures--12-unpaired.json
|
||||
62dd935445e76dd74922134633212d035b2f0fc838c63c504e6b54b46d02ed92 v100b-01/fixtures--13-unpaired.json
|
||||
d06c602fc1950f1f63f7b79e98e3fbeef2a291811c91fc7ffdaab5acfd9ea3f4 v100b-01/invalid-input-rejections.json
|
||||
efec9a44ffd1ef441152cc091b3a4801aa0ca11fafd25e8ff41f3a652bad56e7 v100b-01/summary.json
|
||||
ddac272c00c4b59ba1655aebad95a714986447bb600ac71513fed8221bcd098a v100b-01/synthetic--00-empty-us900.json
|
||||
cd1f3f2d2c356e142c84719ceea224e2e7656871fc4640a906d5f899e813e40f v100b-01/synthetic--01-non-kc-only.json
|
||||
8e4bbaaef9c0ed1a2bb15030a9f63cc25b15904a106d1f86d0df67f15855cbe8 v100b-01/synthetic--02-no-us-mixed.json
|
||||
c9cebe2da04e389aa447b9d7a963a41abd00483f0aa3a5ab8056af4ae6d3d811 v100b-01/synthetic--03-us-first-tick.json
|
||||
5abeff90afc27c87f85d614c49a641bb30f43e5baa4ce8af83689113c7cb0d23 v100b-01/synthetic--04-us-final-tick.json
|
||||
4c1e6459fc79173bd1b4632cae85952814a8830bb47b2df1400edc28be7ba2be v100b-01/synthetic--05-before-on-after-us900.json
|
||||
c6d4ad242e5b161d4313e35afc1c6bb43eb7609a5e940cad228c5e9ba767460b v100b-01/synthetic--06-d-zero-existing-delta.json
|
||||
69fa71c05cc8b7225c30a281cfed8d996c0aa936df03f3f2e202906ad96fc3f7 v100b-01/synthetic--07-frozen-existing-delta.json
|
||||
27584931bf81f1f7626315913f3603f65f3312a0261b168df9eea8719cb181db v100b-01/synthetic--08-compartment-0.json
|
||||
1ae17daa8f3972eed7d0a7be0471da24c1068b62187dee0117d1175ca605ccaf v100b-01/synthetic--09-compartment-1.json
|
||||
0392356066c68924c4c06a9b0fac47a7bef87f8feb7a20bb36e55dcd6984e7d0 v100b-01/synthetic--10-compartment-2.json
|
||||
893e197df233d6a14c509d6d76b1d1f22b7c5e0ea5d293e735b7779c8144019e v100b-01/synthetic--11-compartment-3.json
|
||||
cc643dbc8a39fe62f08bd16019036ceeb155b95e08990b5698ea2d60f2c1e42e v100b-01/synthetic--12-already-at-floor.json
|
||||
181b158d1acf072259b4be3a33e61602180193119cd34947919b38d64d0af1c8 v100b-01/synthetic--13-one-ulp-above-floor.json
|
||||
a4b60169a9a2400196207fa3fea8f85ee554725cddaefa7acb23f5bd7b7693ee v100b-01/synthetic--14-seeded-sparse-717.json
|
||||
e144a917aea30f01be01fd623f5437535211d4a4a4fe407f4fa8d17652033963 v100b-01/synthetic--15-seeded-sparse-20261001.json
|
||||
6efdec34c96cdc79f786b91bd7a99b0e8ef64d0c4dcfa525646c82659a77d44f artifact-manifest.json
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,160 @@
|
||||
{
|
||||
"benchmark_candidate_commit": "221e1f13f758ebe8d9f188bab976c361f7cacf45",
|
||||
"created_utc": "2026-10-01T06:43:12.585942+00:00",
|
||||
"devices": [
|
||||
{
|
||||
"benchmark_wall_seconds": 3.823799389999749,
|
||||
"bitwise_exact": true,
|
||||
"context_initialization_seconds": 0.21562433999997666,
|
||||
"cpu_baseline_sample_warning": "One cold plus ONE warm original API sample per fixture; GPU 3 warmups +20 repeats per fixture.",
|
||||
"device": {
|
||||
"compute_capability": "70",
|
||||
"cupy_version": "13.6.0",
|
||||
"driver_version": "580.178.04",
|
||||
"driver_version_runtime": 13000,
|
||||
"initialization_seconds": 0.21562433999997666,
|
||||
"memory_total_mib": "16384",
|
||||
"memory_used_mib": "918",
|
||||
"name": "Tesla V100-SXM2-16GB",
|
||||
"numpy_version": "2.2.6",
|
||||
"pci_bus_id": "00000000:24:00.0",
|
||||
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
|
||||
"runtime_name": "Tesla V100-SXM2-16GB",
|
||||
"runtime_pci_bus_id": "0000:24:00.0",
|
||||
"runtime_version": 12090,
|
||||
"utilization_percent": "0",
|
||||
"uuid": "GPU-a745fd30-4ca8-2370-09f6-2d374ac866dc"
|
||||
},
|
||||
"first_use_compile_seconds": 0.5175303470000472,
|
||||
"invalid_inputs_rejected": 6,
|
||||
"mean_real_fixture_candidate_replay_seconds": 0.0030653400000021846,
|
||||
"median_real_fixture_candidate_replay_seconds": 0.0034301260000120237,
|
||||
"median_real_fixture_cpu_cold_update_api_seconds": 1.3763328334998732,
|
||||
"median_real_fixture_cpu_original_update_api_seconds": 0.10878832900016278,
|
||||
"median_real_fixture_resident_kernel_seconds": 0.00012198399752378464,
|
||||
"observed_cuda_pool_reserved_peak_bytes": 367616,
|
||||
"original_update_api_to_candidate_replay_ratio": 31.81186385112393,
|
||||
"positive_fixtures": 30,
|
||||
"ratio_warning": "Different API overhead boundaries: original U checks/AST every call; candidate authenticates sources/mapping once. NOT pure CPU/GPU hardware ratio.",
|
||||
"real_fixture_count": 14,
|
||||
"result_sha256": "221095febd8af92e5aba4663c82da8826578d7480b5bea9e08c008972986b164",
|
||||
"run": "v100a-02"
|
||||
},
|
||||
{
|
||||
"benchmark_wall_seconds": 3.6053910950004138,
|
||||
"bitwise_exact": true,
|
||||
"context_initialization_seconds": 0.21543903399970077,
|
||||
"cpu_baseline_sample_warning": "One cold plus ONE warm original API sample per fixture; GPU 3 warmups +20 repeats per fixture.",
|
||||
"device": {
|
||||
"compute_capability": "70",
|
||||
"cupy_version": "13.6.0",
|
||||
"driver_version": "580.178.04",
|
||||
"driver_version_runtime": 13000,
|
||||
"initialization_seconds": 0.21543903399970077,
|
||||
"memory_total_mib": "16384",
|
||||
"memory_used_mib": "312",
|
||||
"name": "Tesla V100-SXM2-16GB",
|
||||
"numpy_version": "2.2.6",
|
||||
"pci_bus_id": "00000000:25:00.0",
|
||||
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
|
||||
"runtime_name": "Tesla V100-SXM2-16GB",
|
||||
"runtime_pci_bus_id": "0000:25:00.0",
|
||||
"runtime_version": 12090,
|
||||
"utilization_percent": "0",
|
||||
"uuid": "GPU-0f0ff6ed-bf1f-50ea-c244-b4566eccc66a"
|
||||
},
|
||||
"first_use_compile_seconds": 0.34027977499999906,
|
||||
"invalid_inputs_rejected": 6,
|
||||
"mean_real_fixture_candidate_replay_seconds": 0.002988729749956422,
|
||||
"median_real_fixture_candidate_replay_seconds": 0.0033436992500810447,
|
||||
"median_real_fixture_cpu_cold_update_api_seconds": 1.3763328334998732,
|
||||
"median_real_fixture_cpu_original_update_api_seconds": 0.10878832900016278,
|
||||
"median_real_fixture_resident_kernel_seconds": 0.00012160000205039978,
|
||||
"observed_cuda_pool_reserved_peak_bytes": 367616,
|
||||
"original_update_api_to_candidate_replay_ratio": 32.71325311168391,
|
||||
"positive_fixtures": 30,
|
||||
"ratio_warning": "Different API overhead boundaries: original U checks/AST every call; candidate authenticates sources/mapping once. NOT pure CPU/GPU hardware ratio.",
|
||||
"real_fixture_count": 14,
|
||||
"result_sha256": "efec9a44ffd1ef441152cc091b3a4801aa0ca11fafd25e8ff41f3a652bad56e7",
|
||||
"run": "v100b-01"
|
||||
},
|
||||
{
|
||||
"benchmark_wall_seconds": 3.542117918999793,
|
||||
"bitwise_exact": true,
|
||||
"context_initialization_seconds": 0.24383461099978376,
|
||||
"cpu_baseline_sample_warning": "One cold plus ONE warm original API sample per fixture; GPU 3 warmups +20 repeats per fixture.",
|
||||
"device": {
|
||||
"compute_capability": "89",
|
||||
"cupy_version": "13.6.0",
|
||||
"driver_version": "580.178.04",
|
||||
"driver_version_runtime": 13000,
|
||||
"initialization_seconds": 0.24383461099978376,
|
||||
"memory_total_mib": "49140",
|
||||
"memory_used_mib": "396",
|
||||
"name": "NVIDIA GeForce RTX 4090",
|
||||
"numpy_version": "2.2.6",
|
||||
"pci_bus_id": "00000000:81:00.0",
|
||||
"python_version": "3.10.12 (main, Aug 31 2026, 10:18:17) [GCC 11.4.0]",
|
||||
"runtime_name": "NVIDIA GeForce RTX 4090",
|
||||
"runtime_pci_bus_id": "0000:81:00.0",
|
||||
"runtime_version": 12090,
|
||||
"utilization_percent": "0",
|
||||
"uuid": "GPU-79f3a85d-adce-7833-7003-6488140ca596"
|
||||
},
|
||||
"first_use_compile_seconds": 0.3366978859999108,
|
||||
"invalid_inputs_rejected": 6,
|
||||
"mean_real_fixture_candidate_replay_seconds": 0.002947911642812479,
|
||||
"median_real_fixture_candidate_replay_seconds": 0.00332674724984372,
|
||||
"median_real_fixture_cpu_cold_update_api_seconds": 1.3763328334998732,
|
||||
"median_real_fixture_cpu_original_update_api_seconds": 0.10878832900016278,
|
||||
"median_real_fixture_resident_kernel_seconds": 7.372800260782241e-05,
|
||||
"observed_cuda_pool_reserved_peak_bytes": 367616,
|
||||
"original_update_api_to_candidate_replay_ratio": 32.80226555755503,
|
||||
"positive_fixtures": 30,
|
||||
"ratio_warning": "Different API overhead boundaries: original U checks/AST every call; candidate authenticates sources/mapping once. NOT pure CPU/GPU hardware ratio.",
|
||||
"real_fixture_count": 14,
|
||||
"result_sha256": "377cb655e5b6e5816ccca3b5a03c481021afc3da64879af9be72c207e88639c7",
|
||||
"run": "rtx4090-01"
|
||||
}
|
||||
],
|
||||
"fixes_preserved": [
|
||||
"Initial candidate pip22 lacked--report; upgraded pip only in new venv",
|
||||
"First GPU compile rejected conflictingFTZ options; no kernel executed; explicit nvcc compilation retains original precision"
|
||||
],
|
||||
"frozen_integrity": {
|
||||
"bytes_checked": 3103901058,
|
||||
"created_utc": "2026-10-01T06:43:10.470895+00:00",
|
||||
"file_mismatches": [],
|
||||
"files_checked": 64034,
|
||||
"inventory_sha256": "d7b675b0d0d4647d8fe2fcf9616b9a599e5bc3c15565e604e0d66a046afb835a",
|
||||
"original_experiment_resumed": false,
|
||||
"original_git_head": "09187e4d4d67badf1b418c5f211258ca5d8fb328",
|
||||
"original_git_status": "",
|
||||
"probes_completed_unchanged": 138,
|
||||
"registered_science_commit": "80aeb2093db655329774eff7b32fb6e417b8b40b",
|
||||
"registration_sha256": "b63e6281b6505ca3b60acb467dd0b3fae274cf513dcbfd653649ba52e9ba9740",
|
||||
"scope": "Saved Phase4AR experiment/control files and registered source files; NOT a new Phase1-4AQ numerical regression",
|
||||
"source_mismatches": [],
|
||||
"sources_checked": 16,
|
||||
"status": "PASS",
|
||||
"training_epochs_cpu_verified_unchanged": 1033,
|
||||
"wall_seconds": 4.8638160139998945
|
||||
},
|
||||
"full_brain_gpu_event_equivalence_tested": false,
|
||||
"full_training_acceleration_measured": false,
|
||||
"learned_candidate_created": false,
|
||||
"limitations": [
|
||||
"Replay module only, not a production training backend",
|
||||
"The sampled committed prefix covers7arms but only available physiological/PAM15/reinforce_A subset",
|
||||
"Repeated kernel calculations reset state and replay identical saved inputs, not additional learning trials",
|
||||
"Original CPU verification remains independent and required",
|
||||
"No simultaneous two-V100 training/scheduling benchmark; devices tested separately",
|
||||
"Original9.07-day estimate is not replaced by this component benchmark"
|
||||
],
|
||||
"next_work": "Separately validate persistent training/update/verification workers and complete chain timing before authorizing a new scientific execution version",
|
||||
"original_experiment_resumed": false,
|
||||
"report_code_commit": "221e1f13f758ebe8d9f188bab976c361f7cacf45",
|
||||
"scientific_experiment_status": "STOPPED, unchanged:1033/30000 CPU-verified training epochs and138/3920 probes",
|
||||
"status": "PASS-ELIGIBILITY-UPDATE-REPLAY-EQUIVALENCE",
|
||||
"weights_installed": false
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
{
|
||||
"catalog_sha256": "28071f276848ea60149f21a9794653486b404670a58b34d97b1aaae742095245",
|
||||
"groups": {
|
||||
"gpu": {
|
||||
"archive_bytes": 1679158,
|
||||
"files": 614,
|
||||
"original_bytes": 13242628,
|
||||
"sha256": "50acdc85342a2c79c3516e50ee4542b909813d179518451edaaf2d94150c534b",
|
||||
"verified": true
|
||||
},
|
||||
"pipeline": {
|
||||
"archive_bytes": 74767927,
|
||||
"files": 1066,
|
||||
"original_bytes": 103062185,
|
||||
"sha256": "fdc39013d71fb7d14313d8249c929601a8a7050cc2eac88b733d692bbe1b6b42",
|
||||
"verified": true
|
||||
}
|
||||
},
|
||||
"pass_all": true,
|
||||
"verification": "Full streamed members, no extraction or model execution"
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
# 常驻进程工程回放结果
|
||||
|
||||
状态:`PASS-PERSISTENT-REPLAY-EQUIVALENCE`。仅限这次固定回放,不代表学习成功或正式运行时升级。
|
||||
|
||||
## 实测
|
||||
|
||||
| 测量范围 | 新进程 | 常驻进程 | 说明 |
|
||||
|---|---:|---:|---|
|
||||
| 原始 CPU 更新 API | 1.3480 s | 0.1182 s | 新进程首次 API 包含导入等开销 |
|
||||
| 完整更新 API,同一固定案例 | 3.7089 s | 2.3424 s | 仅一组冷启动对照 |
|
||||
| 全脑原始运行函数,13 组配对中位数 | 5.9825 s | 3.7222 s | 含原有输出;排除固定首例的初始化 |
|
||||
|
||||
完整更新常驻 14 组中位耗时:2.3483 s。
|
||||
完整独立验证仍需:3.6435 s(14 组中位数)。
|
||||
全脑运行函数同案例配对倍率中位数:1.620×,不是整轮训练加速倍率。
|
||||
|
||||
## 一致性与保护
|
||||
|
||||
- 17 项主机测试通过。
|
||||
- CPU:14 次冷启动更新、42 次独立双进程更新/重算、29 次完整更新、14 次完整独立验证通过。
|
||||
- 全脑:14 次新进程、正序 14 次与逆序 14 次常驻回放;所有脉冲、状态、延迟队列和请求等一致,10 个数组逐位相同。
|
||||
- 64,034 个原实验文件与 16 个注册源码重新校验通过;之前 659 个加速产物和 13 个源码保持不变。
|
||||
- 原 Phase4AR 仍停止于 1,033 轮 CPU 校验训练与 138 次 probe,没有新增训练或安装新权重。
|
||||
|
||||
## 边界与下一步
|
||||
|
||||
本次全脑测试使用原 RTX 4090 环境,没有证明全脑已能迁移到 V100。此前 V100 约 3.4 ms 的成绩仅属于 eligibility/update 模块。
|
||||
常驻进程复用的是解释器、模块和 CUDA 上下文;每轮神经状态仍由原始函数重新分配。
|
||||
当前仍保留完整验证、图和权重上传、记录写盘。下一步应在新的可审计流水线中验证整轮开销,不能把本报告的独立阶段相加当作实测训练速度。
|
||||
|
||||
源码提交:`018f038c7857c7e0236dd7408a680458520d92ce`。完整逐例耗时、实际进程退出、来源校验见 `final-summary.json` 和各 lane 报告。
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,532 @@
|
||||
{
|
||||
"brain_matched_pairs": [
|
||||
{
|
||||
"first_fixture_cold_build_and_context": true,
|
||||
"fixed_index": 0,
|
||||
"fixture_id": "00-cs_only",
|
||||
"fresh_runtime_seconds": 65.35286720699969,
|
||||
"fresh_simulation_seconds": 2.614504967999892,
|
||||
"fresh_trial_wall_seconds": 67.3396666159997,
|
||||
"resident_runtime_seconds": 4.829426256000261,
|
||||
"resident_simulation_seconds": 2.4258526345001883,
|
||||
"resident_trial_wall_seconds": 7.01521050700012,
|
||||
"runtime_ratio": 13.532221788416964,
|
||||
"trial_wall_ratio": 9.599094218028796
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 1,
|
||||
"fixture_id": "01-cs_only",
|
||||
"fresh_runtime_seconds": 5.984003917999871,
|
||||
"fresh_simulation_seconds": 2.593902593999701,
|
||||
"fresh_trial_wall_seconds": 8.017140279999694,
|
||||
"resident_runtime_seconds": 3.7571635549998064,
|
||||
"resident_simulation_seconds": 2.295868848999362,
|
||||
"resident_trial_wall_seconds": 5.915995811999892,
|
||||
"runtime_ratio": 1.5926918885489347,
|
||||
"trial_wall_ratio": 1.355163278469177
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 2,
|
||||
"fixture_id": "02-d_zero",
|
||||
"fresh_runtime_seconds": 5.9979634660003285,
|
||||
"fresh_simulation_seconds": 2.5769733950000955,
|
||||
"fresh_trial_wall_seconds": 8.022121797000182,
|
||||
"resident_runtime_seconds": 3.751296795000144,
|
||||
"resident_simulation_seconds": 2.2797322554997663,
|
||||
"resident_trial_wall_seconds": 5.890771792999658,
|
||||
"runtime_ratio": 1.5989040040752356,
|
||||
"trial_wall_ratio": 1.3618116740718642
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 3,
|
||||
"fixture_id": "03-d_zero",
|
||||
"fresh_runtime_seconds": 5.982476725000197,
|
||||
"fresh_simulation_seconds": 2.5773725859999104,
|
||||
"fresh_trial_wall_seconds": 8.00832260900006,
|
||||
"resident_runtime_seconds": 3.7547762260001036,
|
||||
"resident_simulation_seconds": 2.319585893000294,
|
||||
"resident_trial_wall_seconds": 5.895358800500162,
|
||||
"runtime_ratio": 1.5932978065574956,
|
||||
"trial_wall_ratio": 1.358411401240012
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 4,
|
||||
"fixture_id": "04-dan_only",
|
||||
"fresh_runtime_seconds": 4.749538970000685,
|
||||
"fresh_simulation_seconds": 1.3650442850002946,
|
||||
"fresh_trial_wall_seconds": 6.727319513999646,
|
||||
"resident_runtime_seconds": 2.529837508000128,
|
||||
"resident_simulation_seconds": 1.1021227920000456,
|
||||
"resident_trial_wall_seconds": 4.626612702999864,
|
||||
"runtime_ratio": 1.877408709049959,
|
||||
"trial_wall_ratio": 1.4540485547099495
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 5,
|
||||
"fixture_id": "05-dan_only",
|
||||
"fresh_runtime_seconds": 4.794270962000155,
|
||||
"fresh_simulation_seconds": 1.3635098229997311,
|
||||
"fresh_trial_wall_seconds": 6.785381824000069,
|
||||
"resident_runtime_seconds": 2.5495016239997312,
|
||||
"resident_simulation_seconds": 1.0964573165001639,
|
||||
"resident_trial_wall_seconds": 4.630903192000005,
|
||||
"runtime_ratio": 1.8804737823538882,
|
||||
"trial_wall_ratio": 1.4652394020505497
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 6,
|
||||
"fixture_id": "06-frozen",
|
||||
"fresh_runtime_seconds": 5.943664408000586,
|
||||
"fresh_simulation_seconds": 2.537586863000797,
|
||||
"fresh_trial_wall_seconds": 7.968554020000738,
|
||||
"resident_runtime_seconds": 3.739337917499597,
|
||||
"resident_simulation_seconds": 2.274588298999788,
|
||||
"resident_trial_wall_seconds": 5.863817397000275,
|
||||
"runtime_ratio": 1.5894964667902942,
|
||||
"trial_wall_ratio": 1.3589362492899544
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 7,
|
||||
"fixture_id": "07-frozen",
|
||||
"fresh_runtime_seconds": 6.110534065999673,
|
||||
"fresh_simulation_seconds": 2.582069095999941,
|
||||
"fresh_trial_wall_seconds": 8.228193209999517,
|
||||
"resident_runtime_seconds": 3.7222462010004165,
|
||||
"resident_simulation_seconds": 2.302735479000148,
|
||||
"resident_trial_wall_seconds": 5.8500312219998705,
|
||||
"runtime_ratio": 1.641625442281965,
|
||||
"trial_wall_ratio": 1.4065212471099697
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 8,
|
||||
"fixture_id": "08-paired",
|
||||
"fresh_runtime_seconds": 6.045053863999783,
|
||||
"fresh_simulation_seconds": 2.56315154099957,
|
||||
"fresh_trial_wall_seconds": 8.07308078099959,
|
||||
"resident_runtime_seconds": 3.7187771884996437,
|
||||
"resident_simulation_seconds": 2.292921604500407,
|
||||
"resident_trial_wall_seconds": 5.844987367499925,
|
||||
"runtime_ratio": 1.6255488182228754,
|
||||
"trial_wall_ratio": 1.381197301792063
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 9,
|
||||
"fixture_id": "09-paired",
|
||||
"fresh_runtime_seconds": 6.0329436539996095,
|
||||
"fresh_simulation_seconds": 2.578432846999931,
|
||||
"fresh_trial_wall_seconds": 8.06702318600037,
|
||||
"resident_runtime_seconds": 3.752024064000125,
|
||||
"resident_simulation_seconds": 2.3125394145004066,
|
||||
"resident_trial_wall_seconds": 5.875522780999745,
|
||||
"runtime_ratio": 1.6079171005016797,
|
||||
"trial_wall_ratio": 1.3729881555540036
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 10,
|
||||
"fixture_id": "10-random_reward",
|
||||
"fresh_runtime_seconds": 5.9459936279999965,
|
||||
"fresh_simulation_seconds": 2.5486168549996364,
|
||||
"fresh_trial_wall_seconds": 7.969415038999614,
|
||||
"resident_runtime_seconds": 3.741656974500529,
|
||||
"resident_simulation_seconds": 2.2819819735000237,
|
||||
"resident_trial_wall_seconds": 5.869267663999835,
|
||||
"runtime_ratio": 1.5891338165208806,
|
||||
"trial_wall_ratio": 1.3578210255908747
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 11,
|
||||
"fixture_id": "11-random_reward",
|
||||
"fresh_runtime_seconds": 6.022653824999907,
|
||||
"fresh_simulation_seconds": 2.577513352999631,
|
||||
"fresh_trial_wall_seconds": 8.047795367000617,
|
||||
"resident_runtime_seconds": 3.7174769284997637,
|
||||
"resident_simulation_seconds": 2.3056816289999915,
|
||||
"resident_trial_wall_seconds": 5.856069947500146,
|
||||
"runtime_ratio": 1.6200917829046022,
|
||||
"trial_wall_ratio": 1.3742655806965012
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 12,
|
||||
"fixture_id": "12-unpaired",
|
||||
"fresh_runtime_seconds": 4.770189471999402,
|
||||
"fresh_simulation_seconds": 1.3640906330001599,
|
||||
"fresh_trial_wall_seconds": 6.746124274999602,
|
||||
"resident_runtime_seconds": 2.5186805469998035,
|
||||
"resident_simulation_seconds": 1.1082154464997984,
|
||||
"resident_trial_wall_seconds": 4.599120383999889,
|
||||
"runtime_ratio": 1.8939239744720884,
|
||||
"trial_wall_ratio": 1.4668292437982342
|
||||
},
|
||||
{
|
||||
"first_fixture_cold_build_and_context": false,
|
||||
"fixed_index": 13,
|
||||
"fixture_id": "13-unpaired",
|
||||
"fresh_runtime_seconds": 4.788546644000235,
|
||||
"fresh_simulation_seconds": 1.3511515399995915,
|
||||
"fresh_trial_wall_seconds": 6.774379648000831,
|
||||
"resident_runtime_seconds": 2.5566162760001134,
|
||||
"resident_simulation_seconds": 1.1084074525001597,
|
||||
"resident_trial_wall_seconds": 4.625984206500107,
|
||||
"runtime_ratio": 1.8730017050083203,
|
||||
"trial_wall_ratio": 1.4644191042593597
|
||||
}
|
||||
],
|
||||
"brain_steady_13_fixture_summary": {
|
||||
"fresh_runtime_seconds": {
|
||||
"count": 13,
|
||||
"maximum": 6.110534065999673,
|
||||
"mean": 5.628294892461572,
|
||||
"median": 5.982476725000197,
|
||||
"minimum": 4.749538970000685,
|
||||
"total": 73.16783360200043
|
||||
},
|
||||
"fresh_simulation_seconds": {
|
||||
"count": 13,
|
||||
"maximum": 2.593902593999701,
|
||||
"mean": 2.198416570076845,
|
||||
"median": 2.56315154099957,
|
||||
"minimum": 1.3511515399995915,
|
||||
"total": 28.57941541099899
|
||||
},
|
||||
"fresh_trial_wall_seconds": {
|
||||
"count": 13,
|
||||
"maximum": 8.228193209999517,
|
||||
"mean": 7.648834734615425,
|
||||
"median": 8.00832260900006,
|
||||
"minimum": 6.727319513999646,
|
||||
"total": 99.43485155000053
|
||||
},
|
||||
"resident_runtime_seconds": {
|
||||
"count": 13,
|
||||
"maximum": 3.7571635549998064,
|
||||
"mean": 3.3699532157692236,
|
||||
"median": 3.7222462010004165,
|
||||
"minimum": 2.5186805469998035,
|
||||
"total": 43.809391804999905
|
||||
},
|
||||
"resident_simulation_seconds": {
|
||||
"count": 13,
|
||||
"maximum": 2.319585893000294,
|
||||
"mean": 1.9292952618846426,
|
||||
"median": 2.2819819735000237,
|
||||
"minimum": 1.0964573165001639,
|
||||
"total": 25.080838404500355
|
||||
},
|
||||
"resident_trial_wall_seconds": {
|
||||
"count": 13,
|
||||
"maximum": 5.915995811999892,
|
||||
"mean": 5.4880340976922595,
|
||||
"median": 5.856069947500146,
|
||||
"minimum": 4.599120383999889,
|
||||
"total": 71.34444326999937
|
||||
},
|
||||
"runtime_ratio": {
|
||||
"count": 13,
|
||||
"maximum": 1.8939239744720884,
|
||||
"mean": 1.69103963825294,
|
||||
"median": 1.6200917829046022,
|
||||
"minimum": 1.5891338165208806,
|
||||
"total": 21.98351529728822
|
||||
},
|
||||
"trial_wall_ratio": {
|
||||
"count": 13,
|
||||
"maximum": 1.4668292437982342,
|
||||
"mean": 1.3982809398948086,
|
||||
"median": 1.3742655806965012,
|
||||
"minimum": 1.355163278469177,
|
||||
"total": 18.177652218632513
|
||||
}
|
||||
},
|
||||
"cpu_regression": {
|
||||
"cold_U": 14,
|
||||
"full_AQ_on_new_E_outputs": 14,
|
||||
"full_E_cold": 1,
|
||||
"full_E_resident": 28,
|
||||
"host_tests": 17,
|
||||
"resident_update_plus_independent_verification": 42
|
||||
},
|
||||
"cpu_summary": {
|
||||
"cold_U_API_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 1.3637360310003714,
|
||||
"mean": 1.349338465785747,
|
||||
"median": 1.3479703455000163,
|
||||
"minimum": 1.3283745310000086,
|
||||
"sum": 18.890738521000458
|
||||
},
|
||||
"cold_U_subprocess_wall_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 1.8981196659997295,
|
||||
"mean": 1.885562129142792,
|
||||
"median": 1.8844832749996385,
|
||||
"minimum": 1.8637141089993747,
|
||||
"sum": 26.397869807999086
|
||||
},
|
||||
"cold_input_load_verify_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 0.010746739999376587,
|
||||
"mean": 0.009368129571612371,
|
||||
"median": 0.00954562650031221,
|
||||
"minimum": 0.008100717999695917,
|
||||
"sum": 0.1311538140025732
|
||||
},
|
||||
"cold_worker_startup_wall_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 0.10847249400012515,
|
||||
"mean": 0.10693613914281741,
|
||||
"median": 0.10691448550051064,
|
||||
"minimum": 0.10573622599986265,
|
||||
"sum": 1.4971059479994437
|
||||
},
|
||||
"original_full_AQ_subprocess_wall_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 3.668942025999968,
|
||||
"mean": 3.643564634214207,
|
||||
"median": 3.6435176954996678,
|
||||
"minimum": 3.618401282999912,
|
||||
"sum": 51.009904878998896
|
||||
},
|
||||
"original_full_E_cold_first_API_seconds": 3.7089290359999723,
|
||||
"original_full_E_cold_first_process_wall_seconds": 4.24782893199972,
|
||||
"original_full_E_warm_API_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 2.4132408899995426,
|
||||
"mean": 2.3535953922856345,
|
||||
"median": 2.3438503964998745,
|
||||
"minimum": 2.2940232779992584,
|
||||
"sum": 32.950335491998885
|
||||
},
|
||||
"original_full_E_warm_roundtrip_seconds": {
|
||||
"count": 14,
|
||||
"maximum": 2.4179386750001868,
|
||||
"mean": 2.358171566214488,
|
||||
"median": 2.348314214000311,
|
||||
"minimum": 2.2985241940004926,
|
||||
"sum": 33.01440192700284
|
||||
},
|
||||
"resident_warm_U_API_seconds": {
|
||||
"count": 28,
|
||||
"maximum": 0.17676272300013807,
|
||||
"mean": 0.13507185135706226,
|
||||
"median": 0.11820473399984621,
|
||||
"minimum": 0.11332106000008935,
|
||||
"sum": 3.782011837997743
|
||||
},
|
||||
"resident_warm_pair_roundtrip_seconds": {
|
||||
"count": 28,
|
||||
"maximum": 0.3602939359998345,
|
||||
"mean": 0.27662439482141316,
|
||||
"median": 0.24055810749996454,
|
||||
"minimum": 0.22945901599996432,
|
||||
"sum": 7.745483054999568
|
||||
},
|
||||
"resident_warm_verify_API_seconds": {
|
||||
"count": 28,
|
||||
"maximum": 0.17938798499926634,
|
||||
"mean": 0.13211264517862478,
|
||||
"median": 0.1128409300004023,
|
||||
"minimum": 0.10732271400047466,
|
||||
"sum": 3.699154065001494
|
||||
}
|
||||
},
|
||||
"created_utc": "2026-10-01T07:19:11.514183+00:00",
|
||||
"first_brain_fixture": {
|
||||
"first_fixture_cold_build_and_context": true,
|
||||
"fixed_index": 0,
|
||||
"fixture_id": "00-cs_only",
|
||||
"fresh_runtime_seconds": 65.35286720699969,
|
||||
"fresh_simulation_seconds": 2.614504967999892,
|
||||
"fresh_trial_wall_seconds": 67.3396666159997,
|
||||
"resident_runtime_seconds": 4.829426256000261,
|
||||
"resident_simulation_seconds": 2.4258526345001883,
|
||||
"resident_trial_wall_seconds": 7.01521050700012,
|
||||
"runtime_ratio": 13.532221788416964,
|
||||
"trial_wall_ratio": 9.599094218028796
|
||||
},
|
||||
"fixture_manifest_sha256": "481df128d39bf28e5984a6f2e5757f83d45cb7a6136f8d2843ecc0a67eca437b",
|
||||
"full_E_same_fixture_API_comparison": {
|
||||
"API_ratio": 1.5833984849811464,
|
||||
"cold_API_seconds": 3.7089290359999723,
|
||||
"fixture_id": "00-cs_only",
|
||||
"sample_warning": "One fixed-first cold sample; not a 14-fixture matched cold E study",
|
||||
"warm_API_seconds": 2.3423851110001124
|
||||
},
|
||||
"full_brain_regression": {
|
||||
"actual_child_exits_observed_zero": 15,
|
||||
"all_bitwise_exact": true,
|
||||
"arrays_per_trial": 10,
|
||||
"fresh": 14,
|
||||
"resident_forward": 14,
|
||||
"resident_reverse": 14
|
||||
},
|
||||
"integrity": {
|
||||
"fixture_manifest_sha256": "481df128d39bf28e5984a6f2e5757f83d45cb7a6136f8d2843ecc0a67eca437b",
|
||||
"old_artifacts_modified": false,
|
||||
"original": {
|
||||
"bytes_checked": 3103901058,
|
||||
"created_utc": "2026-10-01T07:17:32.838570+00:00",
|
||||
"file_mismatches": [],
|
||||
"files_checked": 64034,
|
||||
"inventory_sha256": "d7b675b0d0d4647d8fe2fcf9616b9a599e5bc3c15565e604e0d66a046afb835a",
|
||||
"original_experiment_resumed": false,
|
||||
"original_git_head": "09187e4d4d67badf1b418c5f211258ca5d8fb328",
|
||||
"original_git_status": "",
|
||||
"probes_completed_unchanged": 138,
|
||||
"registered_science_commit": "80aeb2093db655329774eff7b32fb6e417b8b40b",
|
||||
"registration_sha256": "b63e6281b6505ca3b60acb467dd0b3fae274cf513dcbfd653649ba52e9ba9740",
|
||||
"scope": "Saved Phase4AR experiment/control files and registered source files; NOT a new Phase1-4AQ numerical regression",
|
||||
"source_mismatches": [],
|
||||
"sources_checked": 16,
|
||||
"status": "PASS",
|
||||
"training_epochs_cpu_verified_unchanged": 1033,
|
||||
"wall_seconds": 5.062658503000421
|
||||
},
|
||||
"original_AR_resumed": false,
|
||||
"previous_engineering_files_checked": 659,
|
||||
"previous_engineering_sources_checked": 13,
|
||||
"previous_manifest_sha256": "6efdec34c96cdc79f786b91bd7a99b0e8ef64d0c4dcfa525646c82659a77d44f",
|
||||
"status": "PASS",
|
||||
"wall_seconds": 5.197849371999837
|
||||
},
|
||||
"jobs": {
|
||||
"brain-replay-01": {
|
||||
"command": [
|
||||
"/data/digital-drosophila/models/male-cns-lif/.venv/bin/python",
|
||||
"-B",
|
||||
"/home/qishizhe/digital-drosophila-v100-acceleration/models/male-cns-lif/conditioning-pipeline-acceleration-v1/brain_replay.py",
|
||||
"--fixtures",
|
||||
"/home/qishizhe/phase4ar-v100-acceleration-20261001/fixtures",
|
||||
"--fixture-manifest-sha256",
|
||||
"481df128d39bf28e5984a6f2e5757f83d45cb7a6136f8d2843ecc0a67eca437b",
|
||||
"--output",
|
||||
"/home/qishizhe/phase4ar-pipeline-acceleration-20261001/brain-replay"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"finished_utc": "2026-10-01T07:17:05.441907+00:00",
|
||||
"label": "brain-replay-01",
|
||||
"observed_exit": true,
|
||||
"pid": 35046,
|
||||
"process_group": 35046,
|
||||
"scientific_AR_resumed": false,
|
||||
"scope": "independent engineering replay only",
|
||||
"started_utc": "2026-10-01T07:11:17.781251+00:00",
|
||||
"stop_reason": null,
|
||||
"timed_out": false,
|
||||
"wall_seconds": 347.66065984800025
|
||||
},
|
||||
"brain-unit-tests": {
|
||||
"command": [
|
||||
"/data/digital-drosophila/models/male-cns-lif/.venv/bin/python",
|
||||
"-B",
|
||||
"-m",
|
||||
"unittest",
|
||||
"discover",
|
||||
"-s",
|
||||
"/home/qishizhe/digital-drosophila-v100-acceleration/models/male-cns-lif/conditioning-pipeline-acceleration-v1",
|
||||
"-p",
|
||||
"test_brain_replay.py",
|
||||
"-v"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"finished_utc": "2026-10-01T07:08:49.205842+00:00",
|
||||
"label": "brain-unit-tests",
|
||||
"observed_exit": true,
|
||||
"pid": 34762,
|
||||
"process_group": 34762,
|
||||
"scientific_AR_resumed": false,
|
||||
"scope": "independent engineering replay only",
|
||||
"started_utc": "2026-10-01T07:08:49.035004+00:00",
|
||||
"stop_reason": null,
|
||||
"timed_out": false,
|
||||
"wall_seconds": 0.17084325300038472
|
||||
},
|
||||
"cpu-profile-01": {
|
||||
"command": [
|
||||
"/data/digital-drosophila/models/male-cns-lif/.venv/bin/python",
|
||||
"-B",
|
||||
"/home/qishizhe/digital-drosophila-v100-acceleration/models/male-cns-lif/conditioning-pipeline-acceleration-v1/profile_original.py",
|
||||
"--fixtures",
|
||||
"/home/qishizhe/phase4ar-v100-acceleration-20261001/fixtures",
|
||||
"--fixture-manifest-sha256",
|
||||
"481df128d39bf28e5984a6f2e5757f83d45cb7a6136f8d2843ecc0a67eca437b",
|
||||
"--output",
|
||||
"/home/qishizhe/phase4ar-pipeline-acceleration-20261001/cpu-profile",
|
||||
"--repeats",
|
||||
"3"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"finished_utc": "2026-10-01T07:08:22.538896+00:00",
|
||||
"label": "cpu-profile-01",
|
||||
"observed_exit": true,
|
||||
"pid": 27868,
|
||||
"process_group": 27868,
|
||||
"scientific_AR_resumed": false,
|
||||
"scope": "independent engineering replay only",
|
||||
"started_utc": "2026-10-01T07:05:31.857063+00:00",
|
||||
"stop_reason": null,
|
||||
"timed_out": false,
|
||||
"wall_seconds": 170.68183461700028
|
||||
},
|
||||
"cpu-unit-tests": {
|
||||
"command": [
|
||||
"/data/digital-drosophila/models/male-cns-lif/.venv/bin/python",
|
||||
"-B",
|
||||
"-m",
|
||||
"unittest",
|
||||
"discover",
|
||||
"-s",
|
||||
"/home/qishizhe/digital-drosophila-v100-acceleration/models/male-cns-lif/conditioning-pipeline-acceleration-v1",
|
||||
"-p",
|
||||
"test_profile_original.py",
|
||||
"-v"
|
||||
],
|
||||
"exit_code": 0,
|
||||
"finished_utc": "2026-10-01T07:01:44.742692+00:00",
|
||||
"label": "cpu-unit-tests",
|
||||
"observed_exit": true,
|
||||
"pid": 27719,
|
||||
"process_group": 27719,
|
||||
"scientific_AR_resumed": false,
|
||||
"scope": "independent engineering replay only",
|
||||
"started_utc": "2026-10-01T07:01:44.577624+00:00",
|
||||
"stop_reason": null,
|
||||
"timed_out": false,
|
||||
"wall_seconds": 0.165072402000078
|
||||
}
|
||||
},
|
||||
"limitations": [
|
||||
"Fixed 14 real committed-prefix fixtures only; not the full scientific design.",
|
||||
"Fresh means fresh interpreter, not flushed filesystem caches.",
|
||||
"Brain uses unchanged original 4090 runtime; whole-brain V100 compatibility remains unestablished.",
|
||||
"Original GPU tensors/graph are still allocated and uploaded each trial; no numerical loop rewrite.",
|
||||
"Brain runtime timings include its original output I/O. Trial wall also includes extra audit checks.",
|
||||
"Resident trial audit additionally checks the current fresh reference, making trial-wall boundaries unequal.",
|
||||
"Paired steady timing excludes fixed fixture 0 cold initialization in both lanes; correctness excludes none.",
|
||||
"Independent measured stages are not a combined training pipeline; no end-to-end speedup or revised full-run ETA.",
|
||||
"Full independent AQ still uses a fresh subprocess and all original checks.",
|
||||
"The original stopped scientific run remains at 1033 CPU-verified epochs and 138 probes.",
|
||||
"Integrity covers saved Phase4AR files/sources and previous acceleration files; not a new Phase1-4AQ numerical regression.",
|
||||
"Expected timeout self-test intentionally exits nonzero; it is not a scientific-run failure."
|
||||
],
|
||||
"original_source_commit": "80aeb2093db655329774eff7b32fb6e417b8b40b",
|
||||
"probes_added": 0,
|
||||
"production_runtime_promoted": false,
|
||||
"registration_sha256": "b63e6281b6505ca3b60acb467dd0b3fae274cf513dcbfd653649ba52e9ba9740",
|
||||
"scientific_AR_resumed": false,
|
||||
"scientific_learning_success_claimed": false,
|
||||
"source_commit": "018f038c7857c7e0236dd7408a680458520d92ce",
|
||||
"status": "PASS-PERSISTENT-REPLAY-EQUIVALENCE",
|
||||
"training_epochs_added": 0
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,183 @@
|
||||
"""Read-only source packing and streamed verification for exact replay evidence."""
|
||||
import argparse
|
||||
from datetime import datetime, timezone
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
from pathlib import Path
|
||||
import re
|
||||
import shutil
|
||||
import subprocess
|
||||
import tarfile
|
||||
|
||||
SOURCE_CODE = Path('/home/qishizhe/digital-drosophila-v100-acceleration/models/male-cns-lif')
|
||||
GROUPS = {
|
||||
'gpu': (Path('/home/qishizhe/phase4ar-v100-acceleration-20261001'),
|
||||
'6efdec34c96cdc79f786b91bd7a99b0e8ef64d0c4dcfa525646c82659a77d44f',
|
||||
'conditioning-acceleration-v1'),
|
||||
'pipeline': (Path('/home/qishizhe/phase4ar-pipeline-acceleration-20261001'),
|
||||
'4c598f51e927b3145891db42d9bb345c52d4aaa3b3a05ac257b207fff90cace4',
|
||||
'conditioning-pipeline-acceleration-v1'),
|
||||
}
|
||||
REGISTRY = Path('registry/acceleration-20261001')
|
||||
ARTIFACTS = Path('artifacts/acceleration-20261001')
|
||||
INSTALL_LOGS = {
|
||||
'create-venv.stdout.log', 'create-venv.stderr.log',
|
||||
'install-candidate.stdout.log', 'install-candidate.stderr.log',
|
||||
'install-candidate-attempt-02.stdout.log', 'install-candidate-attempt-02.stderr.log',
|
||||
'upgrade-candidate-pip.stdout.log', 'upgrade-candidate-pip.stderr.log',
|
||||
}
|
||||
SECRET_RULES = [
|
||||
rb'-----BEGIN (?:OPENSSH |RSA |EC )?PRIVATE KEY-----',
|
||||
rb'(?:gh[pousr]_[A-Za-z0-9]{30,}|github_pat_[A-Za-z0-9_]{30,}|AKIA[A-Z0-9]{16})',
|
||||
rb'https?://[^\s/]+:[^\s/@]+@',
|
||||
]
|
||||
|
||||
|
||||
def require(value, message):
|
||||
if not value:
|
||||
raise ValueError(message)
|
||||
|
||||
|
||||
def sha(path):
|
||||
digest = hashlib.sha256()
|
||||
with path.open('rb') as stream:
|
||||
for block in iter(lambda: stream.read(8 << 20), b''):
|
||||
digest.update(block)
|
||||
return digest.hexdigest()
|
||||
|
||||
|
||||
def ident(path):
|
||||
return dict(bytes=path.stat().st_size, sha256=sha(path))
|
||||
|
||||
|
||||
def save(path, obj):
|
||||
with path.open('x') as stream:
|
||||
json.dump(obj, stream, indent=2, sort_keys=True, allow_nan=False)
|
||||
stream.write('\n')
|
||||
|
||||
|
||||
def excluded(name):
|
||||
if name.startswith(('cupy-cache-', 'brain-replay/build/')):
|
||||
return 'Rebuildable compiler cache/SDK intermediates, not a scientific result'
|
||||
if name in INSTALL_LOGS:
|
||||
return 'Environment installation output; versions and wheel report retained'
|
||||
return None
|
||||
|
||||
|
||||
def scan_text(path):
|
||||
if path.suffix.lower() not in ('.json', '.jsonl', '.log', '.md', '.txt', '.csv', '.py', '.cu', '.diff'):
|
||||
return
|
||||
require(path.stat().st_size <= 25 * (1 << 20), 'Oversized text requires manual review')
|
||||
data = path.read_bytes()
|
||||
for rule in SECRET_RULES:
|
||||
require(not re.search(rule, data), 'Potential credential marker: ' + path.name)
|
||||
|
||||
|
||||
def pack(root):
|
||||
require(root == Path('/home/qishizhe/digital-drosophila-acceleration-publication-20261001'), 'Independent publication clone required')
|
||||
require((root / '.git').is_dir() and not root.is_symlink(), 'Ordinary independent clone required')
|
||||
registry, artifacts = root / REGISTRY, root / ARTIFACTS
|
||||
registry.mkdir(parents=True, exist_ok=True)
|
||||
artifacts.mkdir(parents=True, exist_ok=False)
|
||||
catalog = dict(schema='acceleration-publication-v1', created_utc=datetime.now(timezone.utc).isoformat(),
|
||||
numerical_changes=False, training_resumed=False, complete_training_restore=False,
|
||||
scope='Two completed independent engineering experiments, not the full stopped scientific run', groups={})
|
||||
for group, (source, expected_manifest, code_dir) in GROUPS.items():
|
||||
require(sha(source / 'artifact-manifest.json') == expected_manifest, 'Sealed source manifest changed')
|
||||
manifest = json.loads((source / 'artifact-manifest.json').read_text())
|
||||
for name, expected in manifest['source_files'].items():
|
||||
require(sha(SOURCE_CODE / code_dir / name) == expected, 'Sealed source code changed')
|
||||
require(sha(root / 'models/male-cns-lif' / code_dir / name) == expected, 'Published source differs')
|
||||
members, omitted = {}, {}
|
||||
for name, expected in manifest['files'].items():
|
||||
path = source / name
|
||||
require(path.resolve().is_relative_to(source) and not path.is_symlink(), 'Unsafe source path')
|
||||
require(ident(path) == expected, 'Sealed input file changed: ' + name)
|
||||
reason = excluded(name)
|
||||
if reason:
|
||||
omitted[name] = dict(expected, reason=reason)
|
||||
else:
|
||||
scan_text(path)
|
||||
members[group + '/' + name] = dict(expected, source_relative=name)
|
||||
for name in ('artifact-manifest.json', 'SHA256SUMS'):
|
||||
require(group + '/' + name not in members, 'Duplicate source control file')
|
||||
members[group + '/' + name] = dict(ident(source / name), source_relative=name)
|
||||
archive = artifacts / (group + '.tar.zst')
|
||||
with archive.open('xb') as destination:
|
||||
compressor = subprocess.Popen(['zstd', '-q', '-T2', '-3', '-c'], stdin=subprocess.PIPE, stdout=destination)
|
||||
try:
|
||||
with tarfile.open(fileobj=compressor.stdin, mode='w|', format=tarfile.PAX_FORMAT) as tar:
|
||||
for name, item in sorted(members.items()):
|
||||
path = source / item['source_relative']
|
||||
info = tarfile.TarInfo(name)
|
||||
info.size, info.mode, info.mtime = item['bytes'], 0o644, 0
|
||||
with path.open('rb') as stream:
|
||||
tar.addfile(info, stream)
|
||||
require(ident(path) == {k: item[k] for k in ('bytes', 'sha256')}, 'Input changed during packing')
|
||||
compressor.stdin.close()
|
||||
require(compressor.wait(timeout=120) == 0, 'Compression failed')
|
||||
finally:
|
||||
if compressor.poll() is None:
|
||||
compressor.kill()
|
||||
compressor.wait()
|
||||
target = registry / group
|
||||
target.mkdir(exist_ok=False)
|
||||
for name in ('RESULTS.md', 'final-summary.json', 'artifact-manifest.json', 'SHA256SUMS'):
|
||||
shutil.copyfile(source / name, target / name)
|
||||
require(sha(source / name) == sha(target / name), 'Summary copy differs')
|
||||
catalog['groups'][group] = dict(source_root=str(source), source_manifest_sha256=expected_manifest,
|
||||
source_files=manifest['source_files'], archive=str(archive.relative_to(root)), **ident(archive),
|
||||
member_count=len(members), member_bytes=sum(x['bytes'] for x in members.values()),
|
||||
members=members, excluded=omitted, excluded_count=len(omitted))
|
||||
save(registry / 'publication-catalog.json', catalog)
|
||||
result = verify(root)
|
||||
save(registry / 'pack-verification.json', result)
|
||||
print(json.dumps(dict(complete=True, groups=result['groups'], source_files_modified=False), indent=2))
|
||||
|
||||
|
||||
def verify(root):
|
||||
catalog_path = root / REGISTRY / 'publication-catalog.json'
|
||||
catalog = json.loads(catalog_path.read_text())
|
||||
require(catalog['schema'] == 'acceleration-publication-v1', 'Wrong publication catalog')
|
||||
results = {}
|
||||
for group, info in catalog['groups'].items():
|
||||
archive = root / info['archive']
|
||||
require(archive.resolve().is_relative_to(root / ARTIFACTS) and not archive.is_symlink(), 'Unsafe archive path')
|
||||
require(ident(archive) == {k: info[k] for k in ('bytes', 'sha256')}, 'Archive identity mismatch')
|
||||
decoder = subprocess.Popen(['zstd', '-q', '-d', '-c', str(archive)], stdout=subprocess.PIPE)
|
||||
found, total = set(), 0
|
||||
try:
|
||||
with tarfile.open(fileobj=decoder.stdout, mode='r|') as tar:
|
||||
for entry in tar:
|
||||
require(entry.isfile() and entry.name in info['members'] and entry.name not in found, 'Unexpected/duplicate member')
|
||||
expected = info['members'][entry.name]
|
||||
require(entry.size == expected['bytes'], 'Member size mismatch')
|
||||
h, count = hashlib.sha256(), 0
|
||||
with tar.extractfile(entry) as stream:
|
||||
for block in iter(lambda: stream.read(8 << 20), b''):
|
||||
h.update(block)
|
||||
count += len(block)
|
||||
require(count == entry.size and h.hexdigest() == expected['sha256'], 'Member hash mismatch')
|
||||
found.add(entry.name)
|
||||
total += count
|
||||
while decoder.stdout.read(1 << 20):
|
||||
pass
|
||||
require(decoder.wait(timeout=30) == 0 and found == set(info['members']), 'Archive truncated or member set differs')
|
||||
finally:
|
||||
decoder.stdout.close()
|
||||
if decoder.poll() is None:
|
||||
decoder.kill()
|
||||
decoder.wait()
|
||||
results[group] = dict(files=len(found), original_bytes=total, archive_bytes=info['bytes'], sha256=info['sha256'], verified=True)
|
||||
return dict(pass_all=True, groups=results, catalog_sha256=sha(catalog_path), verification='Full streamed members, no extraction or model execution')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('mode', choices=('pack', 'verify'))
|
||||
args = parser.parse_args()
|
||||
if args.mode == 'pack':
|
||||
pack(Path.cwd())
|
||||
else:
|
||||
print(json.dumps(verify(Path.cwd()), indent=2))
|
||||
@@ -0,0 +1,68 @@
|
||||
"""Actual fresh-store remote retrieval; no scientific execution or retries."""
|
||||
import argparse
|
||||
from datetime import datetime, timezone
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import time
|
||||
|
||||
import archive_results as archives
|
||||
|
||||
REMOTE = 'ssh://git@192.168.10.31:2222/qishizhe/digital-drosophila.git'
|
||||
BRANCH = 'codex/v100-conditioning-acceleration'
|
||||
|
||||
|
||||
def cmd(args, output=False):
|
||||
result = subprocess.run(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||
archives.require(result.returncode == 0, 'Git/LFS command failed; no automatic retry; diagnostic output not published')
|
||||
return result.stdout.decode().strip() if output else result.returncode
|
||||
|
||||
|
||||
def run(expected, receipt):
|
||||
root = Path.cwd()
|
||||
archives.require(root == Path('/home/qishizhe/digital-drosophila-acceleration-verify-20261001')
|
||||
and (root / '.git').is_dir(), 'New independent verification clone required')
|
||||
archives.require(cmd(['git', 'rev-parse', 'HEAD'], True) == expected, 'Unexpected checkout commit')
|
||||
archives.require(cmd(['git', 'remote', 'get-url', 'origin'], True) == REMOTE, 'Unexpected remote')
|
||||
remote_ref = cmd(['git', 'ls-remote', 'origin', 'refs/heads/' + BRANCH], True)
|
||||
archives.require(remote_ref.split()[0] == expected, 'Remote branch does not identify data commit')
|
||||
archives.require(not cmd(['git', 'status', '--porcelain'], True), 'Unclean initial checkout')
|
||||
objects = root / '.git/lfs/objects'
|
||||
before = list(p for p in objects.rglob('*') if p.is_file()) if objects.exists() else []
|
||||
archives.require(not before, 'Fresh LFS object store must contain no prior object')
|
||||
archives.require(not receipt.exists() and receipt.parent.is_dir()
|
||||
and receipt.parent == Path('/home/qishizhe/digital-drosophila-acceleration-publication-20261001/registry/acceleration-20261001'),
|
||||
'Exclusive publication receipt required')
|
||||
start = time.perf_counter()
|
||||
pull = cmd(['git', 'lfs', 'pull', '--include=artifacts/acceleration-20261001/**', '--exclude=', 'origin'])
|
||||
fsck = cmd(['git', 'lfs', 'fsck', '--dry-run'])
|
||||
report = archives.verify(root)
|
||||
catalog = json.loads((root / archives.REGISTRY / 'publication-catalog.json').read_text())
|
||||
source_count = 0
|
||||
for group, info in catalog['groups'].items():
|
||||
directory = archives.GROUPS[group][2]
|
||||
for name, expected_sha in info['source_files'].items():
|
||||
archives.require(archives.sha(root / 'models/male-cns-lif' / directory / name) == expected_sha,
|
||||
'Published source differs from sealed version')
|
||||
source_count += 1
|
||||
stored = [p for p in objects.rglob('*') if p.is_file()]
|
||||
archives.require(len(stored) == 2 and not cmd(['git', 'status', '--porcelain'], True), 'Incomplete LFS store or changed checkout')
|
||||
archives.require(cmd(['git', 'rev-parse', 'HEAD'], True) == expected, 'Checkout changed during verification')
|
||||
report.update(schema='acceleration-fresh-remote-delivery-v1', verified_utc=datetime.now(timezone.utc).isoformat(),
|
||||
remote=REMOTE, branch=BRANCH, data_commit=expected, fresh_download_proven=True,
|
||||
initial_LFS_objects=0, downloaded_LFS_objects=len(stored), downloaded_bytes=sum(p.stat().st_size for p in stored),
|
||||
pull_exit_code=pull, fsck_exit_code=fsck, sealed_source_files_checked=source_count,
|
||||
wall_seconds=time.perf_counter()-start, scientific_experiments_run=0, training_resumed=False,
|
||||
complete_training_restore=False, historical_scientific_gate_reexecuted=False,
|
||||
transport='Previously audited LAN-pinned HTTPS adapter, verified TLS and SSH short-lived authorization',
|
||||
scope='Remote Git commit, two actual LFS downloads, complete public archive contents and 22 sealed code files; not all external scientific dependencies')
|
||||
archives.save(receipt, report)
|
||||
print(json.dumps(report, indent=2))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--expected-commit', required=True)
|
||||
parser.add_argument('--receipt', type=Path, required=True)
|
||||
args = parser.parse_args()
|
||||
run(args.expected_commit, args.receipt)
|
||||
@@ -0,0 +1,336 @@
|
||||
"""Repository-local, LAN-pinned Git LFS standalone transfer agent.
|
||||
|
||||
Protocol: https://github.com/git-lfs/git-lfs/blob/main/docs/custom-transfers.md
|
||||
Only fixed-origin SSH authentication and HTTPS basic transfers are supported.
|
||||
No config/network changes, retries, redirects, credential files, or cache-based
|
||||
download substitution. Credentials are passed to curl exclusively on stdin.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import hashlib
|
||||
import json
|
||||
import os
|
||||
from pathlib import Path
|
||||
import re
|
||||
import stat
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
from urllib.parse import urlsplit
|
||||
|
||||
ORIGIN = "ssh://git@192.168.10.31:2222/qishizhe/digital-drosophila.git"
|
||||
HOST = "git.lain.asia"
|
||||
IP = "192.168.10.31"
|
||||
PREFIX = "/qishizhe/digital-drosophila.git/info/lfs"
|
||||
SOURCE = Path("/data/digital-drosophila")
|
||||
OID = re.compile(r"^[0-9a-f]{64}$")
|
||||
HEADER = re.compile(r"^[!#$%&'*+.^_`|~0-9A-Za-z-]+$")
|
||||
MAX_JSON = 2 * 1024 * 1024
|
||||
BLOCK = 1024 * 1024
|
||||
|
||||
|
||||
class TransferError(Exception):
|
||||
"""Only fixed, non-secret messages may be passed to this class."""
|
||||
|
||||
|
||||
def require(ok, code):
|
||||
if not ok:
|
||||
raise TransferError(code)
|
||||
|
||||
|
||||
def decode_json(data):
|
||||
def unique(pairs):
|
||||
result = {}
|
||||
for key, value in pairs:
|
||||
require(key not in result, "duplicate-json-key")
|
||||
result[key] = value
|
||||
return result
|
||||
require(len(data) <= MAX_JSON, "json-response-too-large")
|
||||
try:
|
||||
return json.loads(data, object_pairs_hook=unique)
|
||||
except (UnicodeError, ValueError):
|
||||
raise TransferError("invalid-json") from None
|
||||
|
||||
|
||||
def safe_path(value):
|
||||
require(isinstance(value, (str, Path)), "invalid-file-path")
|
||||
p = Path(value)
|
||||
require(p.is_absolute() and ".." not in p.parts, "absolute-safe-path-required")
|
||||
for component in (p, *p.parents):
|
||||
if component.exists() or component.is_symlink():
|
||||
s = component.lstat()
|
||||
require(not stat.S_ISLNK(s.st_mode) and not
|
||||
(getattr(s, "st_file_attributes", 0) & getattr(stat, "FILE_ATTRIBUTE_REPARSE_POINT", 0)),
|
||||
"symlink-or-reparse-refused")
|
||||
return p
|
||||
|
||||
|
||||
def safe_url(value):
|
||||
require(isinstance(value, str) and len(value) <= 16384 and
|
||||
not any(ord(c) <= 32 or ord(c) == 127 for c in value), "invalid-action-url")
|
||||
try:
|
||||
p = urlsplit(value)
|
||||
valid = (p.scheme == "https" and p.netloc in (HOST, HOST + ":443") and
|
||||
p.hostname == HOST and p.port in (None, 443) and
|
||||
p.username is None and p.password is None and not p.fragment)
|
||||
except ValueError:
|
||||
raise TransferError("url-authority-refused") from None
|
||||
require(valid, "url-authority-refused")
|
||||
require(p.path == PREFIX or p.path.startswith(PREFIX + "/"), "url-repository-prefix-refused")
|
||||
require("%" not in p.path and "\\" not in p.path and
|
||||
all(x not in ("", ".", "..") for x in p.path.split("/")[1:]), "url-path-refused")
|
||||
return value
|
||||
|
||||
|
||||
def safe_headers(value, *, allow_upload_chunked=False):
|
||||
require(isinstance(value, dict) and len(value) <= 32, "invalid-action-headers")
|
||||
result, seen = {}, set()
|
||||
denied = {"host", "connection", "content-length", "transfer-encoding", "te",
|
||||
"trailer", "upgrade", "proxy-authorization", "proxy-connection", "range"}
|
||||
for key, item in value.items():
|
||||
upload_chunked = (allow_upload_chunked is True and isinstance(key, str) and
|
||||
key.lower() == "transfer-encoding" and item == "chunked")
|
||||
require(isinstance(key, str) and HEADER.fullmatch(key) is not None and
|
||||
key.lower() not in seen and (key.lower() not in denied or upload_chunked),
|
||||
"header-name-refused")
|
||||
require(isinstance(item, str) and len(item) <= 16384 and
|
||||
not any(ord(c) < 32 or ord(c) == 127 for c in item), "header-value-refused")
|
||||
seen.add(key.lower())
|
||||
result[key] = item
|
||||
return result
|
||||
|
||||
|
||||
def quote(value):
|
||||
require(isinstance(value, str) and not any(ord(c) < 32 or ord(c) == 127 for c in value),
|
||||
"curl-config-value-refused")
|
||||
return '"' + value.replace("\\", "\\\\").replace('"', '\\"') + '"'
|
||||
|
||||
|
||||
def fingerprint(s):
|
||||
return (s.st_dev, s.st_ino, s.st_mode, s.st_size, s.st_mtime_ns, s.st_ctime_ns)
|
||||
|
||||
|
||||
def verify_file(path, oid, size):
|
||||
path = safe_path(path)
|
||||
before = fingerprint(path.lstat())
|
||||
require(stat.S_ISREG(before[2]) and before[3] == size, "object-file-type-or-size-mismatch")
|
||||
digest, count = hashlib.sha256(), 0
|
||||
with path.open("rb") as handle:
|
||||
opened = fingerprint(os.fstat(handle.fileno()))
|
||||
# Windows path stat and fstat can expose different ctime definitions.
|
||||
require(opened[:-1] == before[:-1] if os.name == "nt" else opened == before,
|
||||
"object-changed-at-open")
|
||||
while data := handle.read(BLOCK):
|
||||
digest.update(data)
|
||||
count += len(data)
|
||||
require(fingerprint(os.fstat(handle.fileno())) == opened, "object-changed-during-read")
|
||||
require(fingerprint(path.lstat()) == before and count == size and digest.hexdigest() == oid,
|
||||
"object-sha-or-stability-mismatch")
|
||||
return before
|
||||
|
||||
|
||||
def git_output(cwd, *args):
|
||||
try:
|
||||
result = subprocess.run(["git", "-C", str(cwd), *args], capture_output=True,
|
||||
timeout=15, check=False)
|
||||
require(result.returncode == 0, "git-inspection-failed")
|
||||
return result.stdout.decode("utf-8").strip()
|
||||
except (OSError, UnicodeError, subprocess.TimeoutExpired):
|
||||
raise TransferError("git-inspection-failed") from None
|
||||
|
||||
|
||||
class Agent:
|
||||
def __init__(self, message, emit, cwd=None):
|
||||
require(message.get("event") == "init" and message.get("operation") in ("upload", "download"),
|
||||
"invalid-init")
|
||||
require(message.get("remote") in ("origin", ORIGIN), "remote-refused")
|
||||
concurrency = message.get("concurrenttransfers")
|
||||
require(type(concurrency) is int and 1 <= concurrency <= 2 and
|
||||
type(message.get("concurrent")) is bool, "concurrency-must-be-at-most-two")
|
||||
cwd = safe_path(Path.cwd() if cwd is None else cwd)
|
||||
require(cwd != SOURCE and SOURCE not in cwd.parents, "scientific-source-cwd-refused")
|
||||
self.root = safe_path(git_output(cwd, "rev-parse", "--show-toplevel"))
|
||||
require(self.root != SOURCE and SOURCE not in self.root.parents, "scientific-source-repository-refused")
|
||||
require(git_output(cwd, "config", "--get", "remote.origin.url") == ORIGIN, "origin-refused")
|
||||
self.git_dir = safe_path(git_output(cwd, "rev-parse", "--absolute-git-dir"))
|
||||
require(self.git_dir == self.root / ".git" and self.git_dir.is_dir(), "ordinary-isolated-clone-required")
|
||||
self.operation, self.emit = message["operation"], emit
|
||||
|
||||
def authenticate(self):
|
||||
command = ["ssh", "-o", "BatchMode=yes", "-o", "StrictHostKeyChecking=yes",
|
||||
"-o", "ConnectTimeout=15", "-o", "ConnectionAttempts=1",
|
||||
"-o", "ServerAliveInterval=10", "-o", "ServerAliveCountMax=2",
|
||||
"-p", "2222", "git@192.168.10.31", "git-lfs-authenticate",
|
||||
"qishizhe/digital-drosophila.git", self.operation]
|
||||
try:
|
||||
result = subprocess.run(command, capture_output=True, timeout=45, check=False)
|
||||
require(result.returncode == 0, "ssh-authentication-failed")
|
||||
auth = decode_json(result.stdout)
|
||||
except (OSError, subprocess.TimeoutExpired):
|
||||
raise TransferError("ssh-authentication-failed") from None
|
||||
require(isinstance(auth, dict), "invalid-ssh-authentication-response")
|
||||
href = safe_url(auth.get("href"))
|
||||
parsed = urlsplit(href)
|
||||
require(parsed.path == PREFIX and not parsed.query, "authentication-base-url-refused")
|
||||
return href, safe_headers(auth.get("header", {}))
|
||||
|
||||
def curl(self, method, url, headers, *, body=None, upload=None, download=None, size=None):
|
||||
safe_url(url)
|
||||
headers = safe_headers(headers, allow_upload_chunked=(self.operation == "upload" and
|
||||
method == "PUT" and upload is not None and body is None and download is None))
|
||||
require(method in ("GET", "POST", "PUT"), "unsupported-http-method")
|
||||
present = {name.lower() for name in headers}
|
||||
if "accept" not in present:
|
||||
headers["Accept"] = "application/vnd.git-lfs+json"
|
||||
if method == "PUT" and "content-type" not in present:
|
||||
headers["Content-Type"] = "application/octet-stream"
|
||||
if body is not None and "content-type" not in present:
|
||||
headers["Content-Type"] = "application/vnd.git-lfs+json"
|
||||
lines = ["url = " + quote(url), "request = " + quote(method),
|
||||
'noproxy = "*"', 'resolve = "' + HOST + ':443:' + IP + '"',
|
||||
'proto = "=https"', 'proto-redir = "=https"', "max-redirs = 0",
|
||||
"connect-timeout = 15", "max-time = 1800", "fail", "silent", "show-error",
|
||||
'write-out = "\\n%{http_code}"']
|
||||
for name, value in headers.items():
|
||||
lines.append("header = " + quote(name + ": " + value))
|
||||
if body is not None:
|
||||
encoded = json.dumps(body, separators=(",", ":"), allow_nan=False)
|
||||
lines.append("data-binary = " + quote(encoded))
|
||||
if upload is not None:
|
||||
lines.append("upload-file = " + quote(str(safe_path(upload))))
|
||||
if download is not None:
|
||||
lines.append("output = " + quote(str(safe_path(download))))
|
||||
require(type(size) is int and size >= 0, "invalid-download-limit")
|
||||
# A zero-byte object still needs a full HTTP fetch, not a cache hit.
|
||||
lines.append("max-filesize = " + str(max(size, 1)))
|
||||
else:
|
||||
lines.append("max-filesize = " + str(MAX_JSON))
|
||||
config = ("\n".join(lines) + "\n").encode("utf-8")
|
||||
try:
|
||||
result = subprocess.run(["curl", "-q", "--config", "-"], input=config,
|
||||
capture_output=True, timeout=1830, check=False)
|
||||
except (OSError, subprocess.TimeoutExpired):
|
||||
raise TransferError("curl-execution-failed") from None
|
||||
# Never print stderr, response data, URLs, configuration, or headers.
|
||||
require(result.returncode == 0, "curl-request-failed")
|
||||
require(len(result.stdout) <= MAX_JSON + 32, "http-response-too-large")
|
||||
content, separator, status = result.stdout.rpartition(b"\n")
|
||||
require(separator and len(status) == 3 and status.isdigit() and 200 <= int(status) < 300,
|
||||
"non-success-http-status")
|
||||
return content
|
||||
|
||||
def batch(self, oid, size):
|
||||
href, headers = self.authenticate()
|
||||
headers = {k: v for k, v in headers.items() if k.lower() not in ("content-type", "accept")}
|
||||
headers.update({"Content-Type": "application/vnd.git-lfs+json", "Accept": "application/vnd.git-lfs+json"})
|
||||
response = decode_json(self.curl("POST", href + "/objects/batch", headers,
|
||||
body={"operation": self.operation, "transfers": ["basic"],
|
||||
"objects": [{"oid": oid, "size": size}]}))
|
||||
require(isinstance(response, dict) and response.get("transfer", "basic") == "basic",
|
||||
"non-basic-batch-response")
|
||||
objects = response.get("objects")
|
||||
require(isinstance(objects, list) and len(objects) == 1 and isinstance(objects[0], dict),
|
||||
"invalid-batch-object-count")
|
||||
item = objects[0]
|
||||
require(item.get("oid") == oid and type(item.get("size")) is int and item["size"] == size,
|
||||
"batch-object-identity-mismatch")
|
||||
require("error" not in item, "batch-object-rejected")
|
||||
actions = item.get("actions", {})
|
||||
require(isinstance(actions, dict), "invalid-batch-actions")
|
||||
allowed = {"upload", "verify"} if self.operation == "upload" else {"download"}
|
||||
require(set(actions) <= allowed, "unexpected-batch-action")
|
||||
for name, action in actions.items():
|
||||
require(isinstance(action, dict), "invalid-batch-action")
|
||||
safe_url(action.get("href"))
|
||||
safe_headers(action.get("header", {}), allow_upload_chunked=(self.operation == "upload" and name == "upload"))
|
||||
return actions
|
||||
|
||||
def progress(self, oid, size, previous=0):
|
||||
self.emit({"event": "progress", "oid": oid, "bytesSoFar": size, "bytesSinceLast": size - previous})
|
||||
|
||||
def transfer(self, message):
|
||||
require(message.get("event") == self.operation and message.get("action") is None,
|
||||
"standalone-operation-required")
|
||||
oid, size = message.get("oid"), message.get("size")
|
||||
require(isinstance(oid, str) and OID.fullmatch(oid) is not None and
|
||||
type(size) is int and 0 <= size <= 2**63 - 1, "invalid-object-identity")
|
||||
source, before = None, None
|
||||
if self.operation == "upload":
|
||||
source = safe_path(message.get("path"))
|
||||
require(source == self.git_dir / "lfs" / "objects" / oid[:2] / oid[2:4] / oid,
|
||||
"upload-outside-current-lfs-object-store")
|
||||
before = verify_file(source, oid, size)
|
||||
actions = self.batch(oid, size)
|
||||
self.progress(oid, 0)
|
||||
if self.operation == "upload":
|
||||
if "upload" in actions:
|
||||
action = actions["upload"]
|
||||
self.curl("PUT", action["href"], action.get("header", {}), upload=source)
|
||||
require(fingerprint(source.lstat()) == before, "upload-source-changed")
|
||||
if "verify" in actions:
|
||||
action = actions["verify"]
|
||||
headers = {k: v for k, v in action.get("header", {}).items() if k.lower() != "content-type"}
|
||||
headers["Content-Type"] = "application/vnd.git-lfs+json"
|
||||
self.curl("POST", action["href"], headers, body={"oid": oid, "size": size})
|
||||
else:
|
||||
require(not actions, "verify-without-upload-refused")
|
||||
require(fingerprint(source.lstat()) == before, "upload-source-changed")
|
||||
self.progress(oid, size)
|
||||
return {"event": "complete", "oid": oid}
|
||||
require("download" in actions, "download-action-missing")
|
||||
directory = safe_path(self.git_dir / "lfs" / "lan-transfer-tmp")
|
||||
directory.mkdir(parents=True, exist_ok=True)
|
||||
safe_path(directory)
|
||||
fd, name = tempfile.mkstemp(prefix=oid + ".", suffix=".partial", dir=directory)
|
||||
os.close(fd)
|
||||
target = Path(name)
|
||||
action = actions["download"]
|
||||
# On failure the uniquely created partial remains for investigation;
|
||||
# it is never used as a fallback/cache input on a later transfer.
|
||||
self.curl("GET", action["href"], action.get("header", {}), download=target, size=size)
|
||||
verify_file(target, oid, size)
|
||||
self.progress(oid, size)
|
||||
return {"event": "complete", "oid": oid, "path": str(target)}
|
||||
|
||||
|
||||
def emit(value):
|
||||
sys.stdout.write(json.dumps(value, separators=(",", ":"), allow_nan=False) + "\n")
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
def serve(inp=None, send=None, factory=Agent):
|
||||
inp, send = sys.stdin if inp is None else inp, emit if send is None else send
|
||||
agent = None
|
||||
while True:
|
||||
line = inp.readline(MAX_JSON + 1)
|
||||
if not line:
|
||||
return 0
|
||||
try:
|
||||
message = decode_json(line)
|
||||
require(isinstance(message, dict), "protocol-object-required")
|
||||
if agent is None:
|
||||
agent = factory(message, send)
|
||||
send({})
|
||||
elif message.get("event") == "terminate":
|
||||
return 0
|
||||
else:
|
||||
oid = message.get("oid")
|
||||
safe_oid = oid if isinstance(oid, str) and OID.fullmatch(oid) else ""
|
||||
try:
|
||||
send(agent.transfer(message))
|
||||
except Exception as exc:
|
||||
code = str(exc) if isinstance(exc, TransferError) else "transfer-internal-failure"
|
||||
send({"event": "complete", "oid": safe_oid,
|
||||
"error": {"code": 2, "message": code}})
|
||||
except Exception as exc:
|
||||
code = str(exc) if isinstance(exc, TransferError) else "agent-initialization-or-protocol-failure"
|
||||
if agent is None:
|
||||
send({"error": {"code": 32, "message": code}})
|
||||
else:
|
||||
# No attacker-supplied raw line or exception text is printed.
|
||||
sys.stderr.write("lan-lfs: invalid protocol; stopping\n")
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(serve())
|
||||
@@ -0,0 +1,286 @@
|
||||
"""Pure temporary/mocked protocol tests: never SSH, curl, GPU, or real Git."""
|
||||
import contextlib
|
||||
import hashlib
|
||||
import io
|
||||
import json
|
||||
from pathlib import Path
|
||||
import subprocess
|
||||
import tempfile
|
||||
import unittest
|
||||
from unittest.mock import patch
|
||||
|
||||
import lan_lfs_transfer as M
|
||||
|
||||
BASE = "https://" + M.HOST + M.PREFIX
|
||||
TOKEN = "synthetic-fixture-" + "credential-value"
|
||||
|
||||
|
||||
class AdapterTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
self.temp = tempfile.TemporaryDirectory()
|
||||
self.addCleanup(self.temp.cleanup)
|
||||
self.root = Path(self.temp.name) / "clone"
|
||||
self.git = self.root / ".git"
|
||||
self.git.mkdir(parents=True)
|
||||
self.data = b"synthetic content\x00\xff\n"
|
||||
self.oid = hashlib.sha256(self.data).hexdigest()
|
||||
self.size = len(self.data)
|
||||
self.events = []
|
||||
self.agent = object.__new__(M.Agent)
|
||||
self.agent.root, self.agent.git_dir = self.root, self.git
|
||||
self.agent.operation, self.agent.emit = "upload", self.events.append
|
||||
self.source = self.git / "lfs" / "objects" / self.oid[:2] / self.oid[2:4] / self.oid
|
||||
self.source.parent.mkdir(parents=True)
|
||||
self.source.write_bytes(self.data)
|
||||
|
||||
def request(self, operation="upload", **extra):
|
||||
value = {"event": operation, "oid": self.oid, "size": self.size, "action": None}
|
||||
if operation == "upload":
|
||||
value["path"] = str(self.source)
|
||||
value.update(extra)
|
||||
return value
|
||||
|
||||
def init_message(self, **extra):
|
||||
return dict(event="init", operation="upload", remote="origin", concurrent=True,
|
||||
concurrenttransfers=2, **extra)
|
||||
|
||||
def action(self, suffix="objects/" ):
|
||||
return {"href": BASE + "/" + suffix + self.oid,
|
||||
"header": {"Authorization": "Bearer " + TOKEN}}
|
||||
|
||||
def test_strict_url_policy(self):
|
||||
self.assertEqual(M.safe_url(BASE + "/objects/" + self.oid + "?signed=opaque"),
|
||||
BASE + "/objects/" + self.oid + "?signed=opaque")
|
||||
invalid = [BASE.replace("https:", "http:"), BASE.replace(M.HOST, M.IP),
|
||||
BASE.replace(M.HOST, "other.example"), BASE.replace(M.HOST, M.HOST + ":444"),
|
||||
BASE.replace(M.HOST, "user:opaque@" + M.HOST), BASE + "-other/objects/x",
|
||||
BASE + "/../other", BASE + "/%2e%2e/other", BASE + "/objects/x#fragment",
|
||||
BASE + "//objects/x", BASE + "/objects\\x", BASE + "\n"]
|
||||
for url in invalid:
|
||||
with self.subTest(url=url), self.assertRaises(M.TransferError):
|
||||
M.safe_url(url)
|
||||
|
||||
def test_headers_reject_injection_and_routing_overrides(self):
|
||||
for headers in ({"Authorization": "x\r\nHost: bad"}, {"Host": "bad"},
|
||||
{"Authorization": "a", "authorization": "b"},
|
||||
{"Range": "bytes=1-"}, {"bad\nkey": "x"}, {"X": "\x00"}):
|
||||
with self.subTest(headers=headers), self.assertRaises(M.TransferError):
|
||||
M.safe_headers(headers)
|
||||
|
||||
def test_init_checks_origin_and_isolated_git_directory(self):
|
||||
values = [str(self.root), M.ORIGIN, str(self.git)]
|
||||
with patch.object(M, "git_output", side_effect=values):
|
||||
actual = M.Agent(self.init_message(), self.events.append, cwd=self.root)
|
||||
self.assertEqual(actual.git_dir, self.git)
|
||||
with patch.object(M, "git_output", side_effect=[str(self.root), "ssh://other/repo"]):
|
||||
with self.assertRaisesRegex(M.TransferError, "origin-refused"):
|
||||
M.Agent(self.init_message(), self.events.append, cwd=self.root)
|
||||
|
||||
def test_original_source_and_excess_concurrency_refused(self):
|
||||
with patch.object(M, "SOURCE", self.root):
|
||||
with self.assertRaisesRegex(M.TransferError, "scientific-source-cwd"):
|
||||
M.Agent(self.init_message(), self.events.append, cwd=self.root)
|
||||
message = self.init_message()
|
||||
message["concurrenttransfers"] = 3
|
||||
with self.assertRaisesRegex(M.TransferError, "concurrency"):
|
||||
M.Agent(message, self.events.append, cwd=self.root)
|
||||
|
||||
def test_ssh_authentication_is_strict_and_operation_scoped(self):
|
||||
response = {"href": BASE, "header": {"Authorization": "Bearer " + TOKEN}}
|
||||
result = subprocess.CompletedProcess([], 0, stdout=json.dumps(response).encode(), stderr=b"")
|
||||
with patch.object(M.subprocess, "run", return_value=result) as call:
|
||||
href, headers = self.agent.authenticate()
|
||||
args = call.call_args.args[0]
|
||||
self.assertIn("BatchMode=yes", args)
|
||||
self.assertIn("StrictHostKeyChecking=yes", args)
|
||||
self.assertEqual(args[-3:], ["git-lfs-authenticate", "qishizhe/digital-drosophila.git", "upload"])
|
||||
self.assertEqual(href, BASE)
|
||||
self.assertIn(TOKEN, headers["Authorization"])
|
||||
self.assertNotIn(TOKEN, json.dumps(args))
|
||||
|
||||
def test_curl_secrets_only_in_stdin_and_secure_defaults(self):
|
||||
result = subprocess.CompletedProcess([], 0, stdout=b"{}\n200", stderr=b"")
|
||||
with patch.object(M.subprocess, "run", return_value=result) as call:
|
||||
body = self.agent.curl("PUT", BASE + "/objects/" + self.oid + "?signature=" + TOKEN,
|
||||
{"Authorization": "Bearer " + TOKEN}, upload=self.source)
|
||||
self.assertEqual(body, b"{}")
|
||||
self.assertEqual(call.call_args.args[0], ["curl", "-q", "--config", "-"])
|
||||
self.assertNotIn(TOKEN, json.dumps(call.call_args.args[0]))
|
||||
config = call.call_args.kwargs["input"].decode()
|
||||
for wanted in ('noproxy = "*"', M.HOST + ":443:" + M.IP, 'proto = "=https"',
|
||||
"max-redirs = 0", "Accept: application/vnd.git-lfs+json",
|
||||
"Content-Type: application/octet-stream", TOKEN):
|
||||
self.assertIn(wanted, config)
|
||||
self.assertNotIn("insecure", config)
|
||||
self.assertNotIn("location", config)
|
||||
self.assertNotIn("retry", config)
|
||||
|
||||
def test_redirect_or_curl_error_is_sanitized(self):
|
||||
for rc, output in ((0, b"redirect body\n302"), (22, b"")):
|
||||
result = subprocess.CompletedProcess([], rc, stdout=output, stderr=TOKEN.encode())
|
||||
with patch.object(M.subprocess, "run", return_value=result):
|
||||
with self.assertRaises(M.TransferError) as caught:
|
||||
self.agent.curl("GET", BASE + "/objects/" + self.oid, {})
|
||||
self.assertNotIn(TOKEN, str(caught.exception))
|
||||
|
||||
def test_post_json_sets_both_gitea_headers(self):
|
||||
result = subprocess.CompletedProcess([], 0, stdout=b"\n204", stderr=b"")
|
||||
with patch.object(M.subprocess, "run", return_value=result) as call:
|
||||
self.agent.curl("POST", BASE + "/verify", {}, body={"oid": self.oid, "size": self.size})
|
||||
config = call.call_args.kwargs["input"].decode()
|
||||
self.assertIn("Accept: application/vnd.git-lfs+json", config)
|
||||
self.assertIn("Content-Type: application/vnd.git-lfs+json", config)
|
||||
|
||||
def test_batch_requests_basic_and_checks_exact_identity(self):
|
||||
response = {"objects": [{"oid": self.oid, "size": self.size, "actions": {"upload": self.action()}}]}
|
||||
with patch.object(self.agent, "authenticate", return_value=(BASE, {"Authorization": TOKEN})), \
|
||||
patch.object(self.agent, "curl", return_value=json.dumps(response).encode()) as call:
|
||||
self.assertIn("upload", self.agent.batch(self.oid, self.size))
|
||||
args, kwargs = call.call_args
|
||||
self.assertEqual(args[1], BASE + "/objects/batch")
|
||||
self.assertEqual(args[2]["Accept"], "application/vnd.git-lfs+json")
|
||||
self.assertEqual(kwargs["body"]["transfers"], ["basic"])
|
||||
response["objects"][0]["size"] += 1
|
||||
with patch.object(self.agent, "authenticate", return_value=(BASE, {})), \
|
||||
patch.object(self.agent, "curl", return_value=json.dumps(response).encode()):
|
||||
with self.assertRaisesRegex(M.TransferError, "identity"):
|
||||
self.agent.batch(self.oid, self.size)
|
||||
|
||||
def test_batch_action_host_rejected(self):
|
||||
action = self.action()
|
||||
action["href"] = action["href"].replace(M.HOST, "other.example")
|
||||
response = {"objects": [{"oid": self.oid, "size": self.size, "actions": {"upload": action}}]}
|
||||
with patch.object(self.agent, "authenticate", return_value=(BASE, {})), \
|
||||
patch.object(self.agent, "curl", return_value=json.dumps(response).encode()):
|
||||
with self.assertRaisesRegex(M.TransferError, "authority"):
|
||||
self.agent.batch(self.oid, self.size)
|
||||
|
||||
def test_upload_chunked_exact_value_allowed_in_action_and_put(self):
|
||||
action = self.action()
|
||||
action["header"]["Transfer-Encoding"] = "chunked"
|
||||
response = {"objects": [{"oid": self.oid, "size": self.size, "actions": {"upload": action}}]}
|
||||
with patch.object(self.agent, "authenticate", return_value=(BASE, {})), \
|
||||
patch.object(self.agent, "curl", return_value=json.dumps(response).encode()):
|
||||
self.assertEqual(self.agent.batch(self.oid, self.size)["upload"]["header"]["Transfer-Encoding"], "chunked")
|
||||
result = subprocess.CompletedProcess([], 0, stdout=b"\n200", stderr=b"")
|
||||
with patch.object(M.subprocess, "run", return_value=result) as call:
|
||||
self.agent.curl("PUT", action["href"], action["header"], upload=self.source)
|
||||
config = call.call_args.kwargs["input"].decode()
|
||||
self.assertIn('header = "Transfer-Encoding: chunked"', config)
|
||||
self.assertIn('request = "PUT"', config)
|
||||
self.assertIn("upload-file = ", config)
|
||||
|
||||
def test_chunked_forbidden_outside_upload_or_for_other_values(self):
|
||||
for value in ("gzip", "CHUNKED", "chunked, gzip", "chunked\r\nX: y", " chunked"):
|
||||
with self.subTest(value=value), self.assertRaises(M.TransferError):
|
||||
self.agent.curl("PUT", BASE + "/objects/" + self.oid,
|
||||
{"Transfer-Encoding": value}, upload=self.source)
|
||||
for method, kwargs in (("GET", {}), ("POST", {"body": {}}), ("PUT", {})):
|
||||
with self.subTest(method=method, kwargs=kwargs), self.assertRaises(M.TransferError):
|
||||
self.agent.curl(method, BASE + "/objects/" + self.oid,
|
||||
{"Transfer-Encoding": "chunked"}, **kwargs)
|
||||
with self.assertRaises(M.TransferError):
|
||||
M.safe_headers({"Transfer-Encoding": "chunked"})
|
||||
for operation, name in (("upload", "verify"), ("download", "download")):
|
||||
self.agent.operation = operation
|
||||
action = self.action()
|
||||
action["header"]["Transfer-Encoding"] = "chunked"
|
||||
response = {"objects": [{"oid": self.oid, "size": self.size, "actions": {name: action}}]}
|
||||
with patch.object(self.agent, "authenticate", return_value=(BASE, {})), \
|
||||
patch.object(self.agent, "curl", return_value=json.dumps(response).encode()):
|
||||
with self.subTest(operation=operation, action=name), self.assertRaises(M.TransferError):
|
||||
self.agent.batch(self.oid, self.size)
|
||||
|
||||
def test_upload_existing_object_needs_no_put(self):
|
||||
with patch.object(self.agent, "batch", return_value={}) as batch, patch.object(self.agent, "curl") as curl:
|
||||
result = self.agent.transfer(self.request())
|
||||
self.assertEqual(result, {"event": "complete", "oid": self.oid})
|
||||
batch.assert_called_once()
|
||||
curl.assert_not_called()
|
||||
self.assertEqual(self.events[-1]["bytesSoFar"], self.size)
|
||||
|
||||
def test_upload_put_then_verification_post(self):
|
||||
actions = {"upload": self.action(), "verify": self.action("verify/")}
|
||||
with patch.object(self.agent, "batch", return_value=actions), \
|
||||
patch.object(self.agent, "curl", return_value=b"") as curl:
|
||||
self.agent.transfer(self.request())
|
||||
self.assertEqual([c.args[0] for c in curl.call_args_list], ["PUT", "POST"])
|
||||
self.assertEqual(curl.call_args_list[1].kwargs["body"], {"oid": self.oid, "size": self.size})
|
||||
|
||||
def test_upload_wrong_sha_fails_before_network(self):
|
||||
self.source.write_bytes(b"x" * self.size)
|
||||
with patch.object(self.agent, "batch") as batch:
|
||||
with self.assertRaisesRegex(M.TransferError, "sha"):
|
||||
self.agent.transfer(self.request())
|
||||
batch.assert_not_called()
|
||||
|
||||
def test_upload_outside_lfs_store_refused(self):
|
||||
other = self.root / self.oid
|
||||
other.write_bytes(self.data)
|
||||
with self.assertRaisesRegex(M.TransferError, "outside-current-lfs"):
|
||||
self.agent.transfer(self.request(path=str(other)))
|
||||
|
||||
def test_upload_source_mutation_detected(self):
|
||||
def change(*args, **kwargs):
|
||||
self.source.write_bytes(b"changed")
|
||||
with patch.object(self.agent, "batch", return_value={"upload": self.action()}), \
|
||||
patch.object(self.agent, "curl", side_effect=change):
|
||||
with self.assertRaisesRegex(M.TransferError, "upload-source-changed"):
|
||||
self.agent.transfer(self.request())
|
||||
|
||||
def test_download_is_fresh_unique_and_verified(self):
|
||||
self.agent.operation = "download"
|
||||
def fetch(*args, **kwargs):
|
||||
kwargs["download"].write_bytes(self.data)
|
||||
return b""
|
||||
with patch.object(self.agent, "batch", return_value={"download": self.action()}), \
|
||||
patch.object(self.agent, "curl", side_effect=fetch) as curl:
|
||||
first = self.agent.transfer(self.request("download"))
|
||||
second = self.agent.transfer(self.request("download"))
|
||||
self.assertNotEqual(first["path"], second["path"])
|
||||
self.assertEqual(Path(first["path"]).read_bytes(), self.data)
|
||||
self.assertEqual(curl.call_count, 2)
|
||||
self.assertEqual(self.source.read_bytes(), self.data)
|
||||
|
||||
def test_download_hash_failure_retains_partial(self):
|
||||
self.agent.operation = "download"
|
||||
def fetch(*args, **kwargs):
|
||||
kwargs["download"].write_bytes(b"x" * self.size)
|
||||
with patch.object(self.agent, "batch", return_value={"download": self.action()}), \
|
||||
patch.object(self.agent, "curl", side_effect=fetch):
|
||||
with self.assertRaisesRegex(M.TransferError, "sha"):
|
||||
self.agent.transfer(self.request("download"))
|
||||
partials = list((self.git / "lfs" / "lan-transfer-tmp").glob("*.partial"))
|
||||
self.assertEqual(len(partials), 1)
|
||||
self.assertEqual(partials[0].read_bytes(), b"x" * self.size)
|
||||
|
||||
def test_protocol_init_progress_completion_terminate(self):
|
||||
requests = [self.init_message(), self.request(), {"event": "terminate"}]
|
||||
incoming = io.StringIO("".join(json.dumps(x) + "\n" for x in requests))
|
||||
with patch.object(self.agent, "batch", return_value={}):
|
||||
code = M.serve(incoming, self.events.append, factory=lambda message, send: self.agent)
|
||||
self.assertEqual(code, 0)
|
||||
self.assertEqual(self.events[0], {})
|
||||
self.assertEqual(self.events[-1], {"event": "complete", "oid": self.oid})
|
||||
|
||||
def test_transfer_error_continues_and_never_echoes_exception_secret(self):
|
||||
incoming = io.StringIO("\n".join(json.dumps(x) for x in
|
||||
[self.init_message(), self.request(), self.request(), {"event": "terminate"}]) + "\n")
|
||||
with patch.object(self.agent, "transfer", side_effect=[RuntimeError(TOKEN), {"event": "complete", "oid": self.oid}]):
|
||||
code = M.serve(incoming, self.events.append, factory=lambda message, send: self.agent)
|
||||
self.assertEqual(code, 0)
|
||||
self.assertIn("error", self.events[1])
|
||||
self.assertNotIn(TOKEN, json.dumps(self.events))
|
||||
self.assertNotIn("error", self.events[2])
|
||||
|
||||
def test_bad_initialization_uses_init_error_schema(self):
|
||||
incoming = io.StringIO(json.dumps(self.init_message()) + "\n")
|
||||
with patch.object(M, "git_output", side_effect=RuntimeError(TOKEN)):
|
||||
code = M.serve(incoming, self.events.append)
|
||||
self.assertEqual(code, 1)
|
||||
self.assertEqual(self.events[0]["error"]["code"], 32)
|
||||
self.assertNotIn(TOKEN, json.dumps(self.events))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user