项目待办:从事实基线重新开始
复核日期:2026-09-13(Asia/Shanghai);基线文件名按任务指定保留 2026-09-12。
源码:dev / 0ba06f436558f12d97625b393767440cdd0f9862。
当前事实只以 唯一事实基线 为准;本页是入口或摘要,不是另一份验收报告。 状态限定为 PASS、FAIL、BLOCKED、NOT PROVEN、HISTORICAL,定义和原始命令输出见基线。
| 任务 | 优先级 | 当前状态 | 独立范围与退出条件 |
|---|---|---|---|
| R01 索引 ABI 与链身份修复 | P0 | FAIL | 在后续源码任务中使用当前 ABI 库计算 Topic/module ID/selector,正确处理 indexed refName hash、commitSha 和 string[];消除不存在的 repositoryCount/repositoryIdAt 依赖,明确仓库枚举来源。不得启用现有 reaper。 |
| R02 索引恢复与 unpin 安全 | P0 | FAIL | 验证 block hash + tx hash + log index 去重、闭区间边界、RPC 分段重试、reorg 回退、ABI/pin/archive 失败不推进 checkpoint、原子一致状态;先具备真正的 dry-run,自动 unpin 继续禁止。 |
| R03 Windows CLI 配置读取 | P1 | BLOCKED | 复现并定位 DACL Access is denied;后续授权源码修复后,使用无密钥测试网配置让完整 igit suite verify 在固定区块返回七模块绑定。不要关闭权限保护掩盖问题。 |
| R04 Foundry 验收 | P1 | BLOCKED | 配齐 forge 后运行 build、test -vvv、test --gas-report 及 required invariant gate;保留实际版本、commit、输出,并处理测试合约尺寸问题。 |
| R05 Kubo 与存储实证 | P1 | BLOCKED | 后续明确范围后配置本机 Kubo,真实生成 CID、recursive pin、远端 confirmation、gateway 读取与 Git object 校验;不能沿用 skipped 生命周期测试作为证据。 |
| R06 Moderation UI | P1 | FAIL | 后续单独实现当前缺失的 UI,并检查 Repo 集成;先建立可测的本地交互,再在明确交易授权后收集钱包收据。 |
| R07 测试网产品 E2E | P1 | NOT PROVEN | R01–R06 相关阻断解除后,取得明确写交易范围及测试网资金,在干净 Windows/Linux 跑真实 push/clone/fetch/pull/ref delete,收集完整因果链。资金本轮未检查,不能假定足够或不足。 |
| R08 切换证据与后续功能范围 | P2 | NOT PROVEN | 统一 reviewed commit,补齐安全审查/finality/approval/checksum;清点 Web local profile 差异、operator journal 验签 TODO 和新增缓存。Recovery/Release/Username 等后续 UI 另立有范围的任务。 |
R01–R08 只是后续任务清单,本轮没有实现这些功能或发送交易。静态修复任务可以开始;真实 E2E 需先解决对应环境/代码阻断并获得明确写交易授权;不得进入生产部署。
新存储工作流 S01–S07(2026-09-13 用户决策)
范围见 ADR 0004; 技术细节见 BYOS 实施规格。下表状态已按 2026-10-05 交付情况同步; 各切片的原始执行记录见下方日期小节。
主网首期直接目标 storage-neutral successor;只接用户自有 AWS S3 / Cloudflare R2 桶, 不接 MinIO/其他云/自建对象存储服务。公开仓库、canonical JSON、用户独立 reader、用户付费, 不强制双副本,不以托管 broker 或私有仓库加密为首期前置条件。
| 任务 | 顺序 / 依赖 | 当前状态 | 实施范围与退出条件 |
|---|---|---|---|
| S01 Canonical manifest / commitment | 立即,本地协议起点 | PASS | 严格 schema、JCS bytes、外层 manifest digest、digest keys、Git/object algorithm 和安全限额;Go/TS 共用正反向向量,明确 pack 顺序与单 pack locations |
| S02 Verified packstore boundary | S01;先封装现有 IPFS | PASS | 临时文件流式写/读、raw SHA-256/size、验证后才摄取;明确 legacy 无链上 raw digest 的边界,初始 successor 用自包含非 thin pack;取消/错误/Windows 文件生命周期测试 |
| S03 AWS/R2 BYOS adapters / config | S01–S02;不等云账号 | PASS | 两个独立 provider capability、endpoint allowlist、writer/reader credential reference、条件写/回读/重复对象/有界重试/multipart 限额与恢复;无真实凭据的 SDK/HTTP contract tests,AWS/R2 不初始化 Kubo/replication |
| S04 Successor Suite / versioned ABI | S01 协议冻结后 | PASS(2026-10-04 本地;2026-10-04 深夜测试网部署) | 合约状态/查询/事件绑定 manifest,revision CAS/force/delete/fork/bootstrap 一起审查;Go/Web/indexer/evidence schema 同版本,保留 v3 ABI 和历史证据,未知组合上传前拒绝;solc/尺寸/parity 分层报告;Foundry unit/invariant/gas 仍 BLOCKED(R04) |
| S05 CLI/Web 本地纵向接入 | S02–S04 | PASS(2026-10-04) | fake cloud/chain + 真实本地 Git 的 push/clone/fetch/pull/new-ref/force/delete 与失败恢复;Web 公开 manifest/pack 先验摘要,CORS/大小上限/鉴权限制提示,无云 secret |
| S06 真实云 / successor 测试网 E2E | 对应本地切片通过,另取资源和写入授权 | PASS(R2 全链路 2026-10-04 深夜);AWS canary NOT PROVEN | 分别证明 AWS/R2 存储及支持的 multipart、公共 GET/CORS、独立 reader、Windows/Linux no-Kubo Git;匹配 successor 收据/finality、源码/ABI/commit。R2 已真实通过;真实 AWS canary、force 陈旧/并发竞争、Blockscout 验证仍待补 |
| S07 历史 v3 导入(条件性) | 仅用户另选 import scope 时,依赖 S04–S06 | NOT PROVEN | 固定视图清点、CID→digest/size/位置 mapping、原 bytes/顺序与独立依赖闭包、目标 ref 上下文、保留 legacy 读取/回滚;新 Suite 不自动要求该步骤,V1 仍只读 archive |
| S08 增量 pack(manifest schema 2,不改 v4 合约) | 立即排期(2026-10-05 用户决策);同日交付 | PASS(2026-10-05 本地切片 + 真实测试网/R2 增量推送复验) | fast-forward push 仅打包本 ref 相对上一 tip 的新对象,manifest 链显式 dependsOn 闭包;空增量复用包集;非 ff/旧 manifest 失效/16 包或 2 GiB 上限自动回退全量;不用 git thin pack;旧客户端 fail-closed;BYOS §2.3 门槛为验收标准,见 ADR 0005 |
2026-09-13 本地切片进展
S01–S03 的 PASS 限定为 BYOS 规格第 9 节 记录的源码和本地测试。 已实现 Go/TS JCS 交叉向量、流式 verified packstore、完整历史 Git fixture、AWS/R2 独立能力与配置、mock 冲突/回读/权限/恢复测试。 R2 限单 PUT 16 MiB;AWS multipart 仅本地测试。现有 helper 保留 v3;storage doctor/show 仅本地,不解析密钥。 S04–S07 仍 NOT PROVEN;下一切片为 successor ABI/CAS/version dispatch,再接 CLI/Web。真实云、真实 IPFS 和链上 Git E2E 未执行。
2026-10-04 S04 本地切片进展(合约+Go/mock 链;S05 CLI/Web 接入仍未开始)
- 新增
contracts/evm-v2-successor/:fresh successor 套件候选(suiteVersion=4)。RepositoryCore为承诺形态(manifestDigest/manifestSize/bootstrapLocator/revision),revision CAS(force 不豁免)、delete 保 revision 的 tombstone(防 delete/recreate ABA)、fork 不复制 ref 承诺、RefUpdated/RefDeleted 事件 v2 携带完整 refName 与全部承诺字段;其余八模块与 v3 逐字节一致(检查脚本强制),SuiteDirectory 仅 suiteVersion 常量不同。v3 源码/ABI/artifacts/历史证据未改动。 scripts/evm-successor-solc-check.mjs:锁定 solc 0.8.24(optimizer runs=1, viaIR)编译、EIP-170 限额、unchanged-from-v3 文件集校验、版本化 abi/artifacts(schemaigit.evm-successor.solc-artifact.v1)。实测 successor RepositoryCore runtime 22637B(v3 为 23504B),EIP-170 余量 1939B。- 新增
cli/internal/chain/successor:checked-in ABI 加载、CAS 客户端(CommitmentMismatch/RefNotFound 类型化 revert 解码)、契约语义一致的 FakeChain(含 uncertain receipt 注入);测试覆盖 create/update/CAS 冲突/force 不豁免/tombstone+ABA 重放拒绝/fork 无承诺/事件完整字段/无效承诺 fail closed,以及 fake cloud + 真实本地 Git 的 publish→CAS→冷克隆(manifest digest/size 预检→JCS Parse→逐包 ReadVerified→IndexVerified→fsck)、上传成功后 CAS 冲突的对象保留与定向恢复、uncertain receipt 解析、fork 上下文绑定拒绝复制源 manifest。 - 验证:
go vet ./...PASS、go test -count=1 ./...29 包全绿(含新包);npm run check --prefix contracts/evm-v2-successorPASS(含幂等重跑)。Foundry unit/invariant/gas 仍 BLOCKED(无 forge,R04 口径不变);真实测试网部署/交易、真实云写入、Web 解码器与 CLI helper 接入仍 NOT PROVEN(S05/S06 范围)。
2026-10-04 S05 本地切片进展(CLI/Web 接入;真实链/云待凭据注入)
- CLI 存储中立分派:
git-remote-igit经chain.ProbeSuiteInfo验证套件版本——v3 走原 IPFS 路径(行为不变),v4 走internal/byos(push=Prepare+CAS、fetch=manifest+ReadVerified+IndexVerified、list=manifest 取 commit OID),BYOS 路径不初始化 Kubo/网关/replication。chain.SuccessorRegistry复用 VerifySuite 信任链与 EVMTransactor 语义;packmanifest.ParseRefManifest提供无预知 commit 的冷读取入口。igit storage add登记 profile 路径(仅引用,不含凭据)。 - Web:
transport版本容错(3/4)+ successor core ABI;registry按 suiteVersion 分派(listSuccessorRefs/resolveSuccessorRefCommit,commit OID 来自已验证 manifest);successorReader.ts受限 fetch+承诺对账+单包/总量内存上限+CORS 可操作 提示(不索取 secret);gitstore.loadVerifiedRef先验证后 isomorphic-git 摄取;useRepoViews自动分派。 - 本地验证:
go vet ./...PASS、go test -count=1 ./...30 包全绿(新增 byos 5 测试 + remote BYOS 全协议会话测试:push→list→冷 fetch→fsck);npm run test:apiPASS(新增 successor-reader 6 测试:验证/篡改/跨仓库替换/CORS 提示/超限/包预算);npm run typecheckPASS;npm run test:storage-crossPASS;双套件 solc check 均 PASS。修复并回归:push 批在 BYOS 下误走 v3 resolveRepo 的缺口、delete-only push 的 Kubo preflight 语义回归。 - 测试网部署准备:
evm-successor-deploy命令(复用 suitedeploy no-clobber 证据流,schema 双白名单);artifacts--checkPASS(set sha256 d58df75b…);operator key 0x3753…43b 余额约 0.63 INJ;storage profile 模板已备(R2 桶/prefix/publicBase 为已验证 canary 参数)。BLOCKED(等待用户):IGIT_EVM_KEY_PASSWORD与IGIT_CANARY_R2_WRITER/READER_KEY/SECRET需由用户通过环境变量注入(值不得经聊天/文件明文传递);真实链/真实云读写与公开 profile 切换仍 NOT PROVEN。
2026-10-04 深夜 S06 真实层进展(successor 测试网部署 + 真实 R2 端到端)
- fresh successor 套件已部署并激活于 Injective 测试网(chainId 1439):Directory
0xf987396475d0a4c96b722e993a95d8720a6292ad,Coordinator0x0360f499fda8d4cf8fba2d3f3c1e28871b8a76fc,operator0x85ea…4fa8(igit-dev/successor-op key)。9/9 合约 + 8/8 配置交易全部确认,绑定验证 suiteVersion=4/state=active/7 模块 code hash 匹配;证据(no-clobber):local-only/successor-deploy/deployment5.json(另有 deployment/2/3/attempt1/successor* 为失败与恢复尝试记录,保留不删)。激活 tx0x8048fc61…。 - 真实端到端全链路 PASS:
git push(自包含 pack → R2 条件 PUT+全量回读 → JCS manifest → CAS 上链)、匿名公开 GET+ACAO 验证(pub-…r2.dev,SHA-256 与链上承诺一致)、干净 Windows 冷git clone(全程无 Kubo/WSL2/injectived,fsck --strict 通过)、增量 push(revision 2)、tag push(新 manifest 绑定 refs/tags)、git ls-remote(含 HEAD symref)、git fetch、删除 ref(tombstone,getRef 回退 RefNotFound)、tombstone 重建(revision 3 单调)。 - 真实链缺陷修复:① RPC Client.Timeout 超时原被排除在重试外(evm_rpc.go 现按 "Client.Timeout exceeded" 语义重试);② getRef/updateRef 的 revert payload 未解码为类型化错误(successorEVMBackend 读/写路径现接 DecodeRevert);③ tombstone 重建期望 (0,0) 被 CAS 正确拒绝后客户端现按 mismatch.actualRevision 定向重试一次;④ suitedeploy 绑定验证硬编码 v3(Options.SuiteVersion 参数化,默认 3 不变);⑤ evm-activate-suite 硬编码 v3 snapshot root(新增 --snapshot-root);⑥ 测试网历史状态修剪窗口短于整套部署时长(Options.VerifyAtLatest 仅 successor 路径启用)。
- 全量回归:
go vet ./...PASS、go test -count=1 ./...30 包全绿。 - NOT PROVEN(真实层遗留):force push 陈旧场景与真实并发双写竞争(CLI 时序无法制造;mock 层已覆 盖);R2 对象外部篡改检测(无覆盖权限且不应执行);Blockscout 源码验证(该网络环境下 explorer 不可达);真实浏览器 igit.xyz 浏览(本地 Settings 配 Directory
0xf98739…92ad后 commits/files/refs 即走 successor verified reader——待人工浏览确认);公开 profile 切换未做(内置 profile Directory 仍为空,符合现行策略)。 - 当前 igit 全局配置已指向 successor Directory;恢复 legacy v3:
igit config set evm_suite_directory_address 0x24124cb60F9EF02F7DeB5BC868c028Fb412F5334。
2026-10-05 路径查询兼容层(web 集中版本分派 + 前向兼容)
- 新增
web/src/lib/suite-compat.ts:suite 协议版本的唯一分派入口。refShapeForVersion()按链上版本映射 ref ABI 形态(v3-→ipfs-pack-uris,v4→manifest-commitment,v5+→unknown 回退 v4 ABI 尝试读取)。transport.ts版本检查放宽为 v3+ 均通过验证(v3 以下无 EVM 读路径);未知版本(v5+)走最新已知 ABI 的 best-effort 读取 + 页面显示 untested 警告标签,不再一刀切拒绝。registry.ts/gitstore.ts的分派统一改为refShapeForVersion()判断,不再散落硬编码版本号比较。 - Repo 页面新增 SuiteVersionBadge:实时显示当前套件协议版本(如 "Suite v4 · BYOS"),未知版本显示 "(untested)"。
- 新增
docs/suite-version-compatibility.md:版本兼容矩阵,明确各版本路径规则、web/CLI 兼容范围、前向兼容策略与新增版本的扩展 方法。 - CLI/合约零改动(v3 IPFS + v4 BYOS 现有分派已满足要求)。验证:typecheck PASS、test:api 146 PASS、go vet + go test 30 包全绿。
2026-10-05 S08 立项:增量 pack(manifest schema 2,不改 v4 合约)
用户当日决策:增量 pack 必须做、立即排期、走小改路线——不改 Suite v4 合约与 suiteVersion,以 manifest schemaVersion 2 表达同一 ref 的有序 pack 链。决策与验收门槛见 ADR 0005;本节为排期记录,实现未开始,不构成任何交付证据。
- 写端(
cli/internal/byos+gitio):fast-forward push 仅打包本 ref 相对上一 tip 的新对象,唯一排除基是本 ref 旧 tip(rev-list --objects <new> --not <old>),绝不排除 sibling refs;新 pack 追加进 manifest 链并显式dependsOn(向后引用、无环、有深度上界);空增量(如 tag 指向已发布 commit)复用包集、仅换 commit 绑定(revision+1,不上传 pack);非 fast-forward/上一 manifest 缺失或校验失败/链达 16 包/总量将超 2 GiB 时自动回退全量自包含 pack 并重置链(§2.1 已许可的重打包模式);force 仍不豁免 revision CAS,ff/ancestry 是客户端检查,链上只保留 CAS 并发检查。 - 读端:CLI
FetchRef已按manifest.Packs顺序逐包ReadVerified+摄取(含去重);需把gitio.IndexVerified拆为逐包字节/index 校验 + 全链一次终检(最后一包后cat-file/fsck闭包检查),因为中间 pack 不含新 tip。Webgitstore/successorReader保持逐包预算(32 MiB/包、256 MiB 总量)并新增 schema 2 解析。 - 兼容性:现有 Go/TS 解析器对
schemaVersion != 1一律拒绝(fail-closed 已是现状);schema 2 需新增 Go/TS 交叉向量(真实实现生成,不手写);schema 1 manifest 与既有 digest-key 对象不变;旧客户端对 schema 2 必须给出可操作的双语升级提示,不得静默回退。 - 验收(硬门槛,出自 BYOS §2.3):依赖闭包显式且无环(拓扑序校验)、数量/总量/深度有上界、缺失任一依赖 pack 时拒绝摄取且不改 ref、删除 sibling ref 后独立 clone 仍完整、空增量/force 重写/16 包回退/CAS 冲突中断后定向恢复各有本地测试;真实 R2 上复验一次增量 push 与冷 clone。
- 明确不做(S08 范围外):链 compaction/合并、orphan GC、跨 ref/跨仓库依赖、git thin pack(
--thin/--fix-thin)、合约或 suiteVersion 变更、私有仓库。
2026-10-05 S08 本地切片进展(同日立项后交付)
- 协议:
packmanifestschema 2 落地——Go/TS 解析器接受schemaVersion 1|2;schema 1 仍要求dependsOn=[](自包含),schema 2 允许显式依赖闭包,且仅接受向后引用(自身/前向/未知/重复 digest 一律拒绝,无环由构造保证)。共享向量由 TS 实现重新生成:13 正向(+schema2-chain/schema2-partial-deps)/ 60 反向(+5 个 schema2 依赖违规),test:storage-crossGo↔TS 字节/摘要双向 PASS。原schema-version=2负向向量语义变更为=3(未知版本仍拒绝)。 - Git 层:
gitio新增IsAncestor(merge-base --is-ancestor,客户端 ff 检查)、PackIncremental(rev-list --objects --count <new> --not <old>计数 +pack-objects --revs无--thin打包;计数 0 返回空信号;非 ff 基拒绝)、IndexPackVerified(逐包字节+结构校验,不要求 tip)与VerifyClosure(全链一次 cat-file+fsck 终检);IndexVerified改为二者组合,行为顺序不变。真实 Git 测试覆盖:增量包显著小于全量包、链式冷摄取+fsck、孤立增量包被index-pack --strict因悬空父引用直接拒绝(缺失依赖在摄取层即 fail-closed,比 §2.3 门槛更强)、篡改字节在 Git 之前被拒。 - BYOS 发布/读取:
byos.PushRef经planPack决策——ref 存在且上一 manifest 可读、ff、链未达 16 包且总量未超限时,追加一个增量包并构建 schema 2 链 manifest(dependsOn=全部更早条目);tip 已是发布 commit 时零上传直接成功(空增量);任一条件不满足(非 ff force 重写/上一 manifest 缺失或校验失败/16 包回卷/预算超限)自动回退 schema 1 自包含全量包。增量上传仅 PutIfAbsent 新包 +PublishManifest(新拆分的 manifest 发布入口),不重传/不覆盖既有包。FetchRef改为逐包IndexPackVerified+ 全链一次VerifyClosure。 - 测试矩阵(全部本地真实 Git + fake chain/cloud):schema2 链构建与 dependsOn 断言;增量 push 仅新增 2 个对象(新包+新 manifest);链冷克隆+
fsck --strict;空增量零上传零 revision;force 重写回退 schema 1 单包;上一 manifest 篡改回退全量并仍可冷克隆;16 包回卷(第 17 次 push 重置为单包 schema 1,revision 单调);删除链上基础包后 fetch 拒绝;删除 sibling ref 及其全部对象后主 ref 冷克隆完整(per-ref 独立);remote helper 协议级增量会话(push→增量 push→list→冷 fetch→fsck)。 - 验证记录:
go vet ./...PASS;go test -count=1 ./...30 包全绿(新增 gitio 增量测试、byos 6 个 S08 测试、remote 增量会话、packmanifest 闭包规则);npm run test:api155/155 PASS(+9);npm run typecheck、npm run build、npm run test:storage-crossPASS。 - 未做/边界:真实 R2 上的增量 push 复验 已通过(见下节);合约/ABI/suiteVersion 零改动(双套件 solc 检查保持通过);schema 1 manifest 与既有对象完全兼容;旧客户端对 schema 2 fail-closed 的真实二进制回归未执行(解析器拒绝逻辑由向量与单测覆盖)。
2026-10-05 S08 真实层复验(Injective 测试网 + 真实 Cloudflare R2 增量推送)
- 仓库:
inj1sh4v00qgzjy25a73mqheew8q200punaglrzec5/demo-showcase-byos(repoId0xa52a01ecfabc8d179af3015bdd5d7d7f754ee5c745e95fc0434e0ac17edcdade,绑定 r2-writer/r2-reader profile),operator0x85ea…4fa8(successor-op)。工具 链为当日源码构建(含 S08)的igit/git-remote-igit,安装于D:\igit-install\bin。 - 前置:链上 main@
52a37ad(rev 3)。本地git pull追平后新建 1 个提交71dc6b6,fast-forwardgit push igit main成功(52a37ad..71dc6b6)。 - 增量证据(链上 + 公开 R2 双向核对):main → revision 4;bootstrap locator 公开 GET 返回 1172 字节 manifest,SHA-256 与链上承诺一致;
schemaVersion=2、packs=2:基础包e55283e8…(1743 B)+ 增量包fef531d9…(755 B,dependsOn=[基础包]显式闭包)。即本次推送仅上传 1 个新 pack + 1 个新 manifest,未重传既有对象。 - 读取复验:二次冷克隆 HEAD=
71dc6b6,git fsck --strict通过,README 含 S08 标记内容完整;tagrefs/tags/v-successor同时可读。 - 凭据口径:R2 writer 密钥与 keystore 密码由用户经环境变量/指定文件提供(密码未回显、未落盘);测试所用 R2 token 已在对话中暴露过明文,用户需在 Cloudflare 控制台轮换。首次尝试因测试网 RPC 瞬时超时失败(suite verification eth_call),重试即成功,无代码影响。