Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
9cf68de
Raise MAX_ANCHOR_DEPTH 32 -> 1024; add FS-operations audit + ADR-0058
JamesCarnley Jun 20, 2026
feee1bb
Draft pre-seeding fixes: REDIRECT resolution, contentHash encoding, F…
JamesCarnley Jun 20, 2026
5277cac
Apply ratified decisions: versioning pinned, D_MAX=16, contentHash=SH…
JamesCarnley Jun 21, 2026
edad17f
WIP: WHITEOUT implementation (compiles; conformance tests pending)
JamesCarnley Jun 21, 2026
54e12b0
WHITEOUT: conformance suite (21 passing) + lint fix; feature complete
JamesCarnley Jun 21, 2026
727535f
WHITEOUT: address P3 review findings (getFilesAtPath parity + filtere…
JamesCarnley Jun 21, 2026
bf3d494
WHITEOUT: opaque-directory + folder re-add fix = complete unionfs del…
JamesCarnley Jun 21, 2026
657cd99
WHITEOUT: close opaque P3 test gaps + stale-string fixes
JamesCarnley Jun 21, 2026
009f7ca
Defer redirect-follower code; keep the resolution spec
JamesCarnley Jun 21, 2026
7b79540
WHITEOUT: drop opaque-directory variant; keep per-name (file + folder)
JamesCarnley Jun 21, 2026
b22f453
Renumber ADRs 0058/0059/0060 -> 0062/0063/0064 (main collision)
JamesCarnley Jun 21, 2026
50b5904
Merge remote-tracking branch 'origin/main' into worktree-raise-max-an…
JamesCarnley Jun 21, 2026
2892e88
router/fileview/deploy: address PR #37 Codex review (P1 + 2x P2)
JamesCarnley Jun 22, 2026
dfe4807
chore: regenerate deployedContracts.ts (WhiteoutResolver + nonce-shif…
JamesCarnley Jun 22, 2026
abd307d
deploy(whiteout): compute WHITEOUT schema UID from the actual proxy, …
JamesCarnley Jun 22, 2026
03602d6
router: intermediate folder segments use listing positive for whiteou…
JamesCarnley Jun 22, 2026
143d251
specs/04+overview: sync upload workflow to ADR-0064 contentHash + 102…
JamesCarnley Jun 22, 2026
881cffa
Renumber ADR 0062 -> 0065 (main collision with devnet-own-chainid)
claude Jun 23, 2026
139dfde
Merge remote-tracking branch 'origin/main' into worktree-raise-max-an…
claude Jun 23, 2026
52dc78d
whiteout: close getDirectoryPageByAddressList bypass + additive deplo…
claude Jun 23, 2026
af31aef
whiteout: gate the visibility-TAG positive to folder anchors + reconc…
claude Jun 23, 2026
4ba9144
specs: ship WHITEOUT in inherited move/rename; align REDIRECT taxonom…
claude Jun 23, 2026
0633440
whiteout: verify WHITEOUT registration on deploy; mark live WHITEOUT …
claude Jun 23, 2026
a25a7c7
specs: symlink cycles stop via visited-set; fix vector-17 getFilesAtP…
claude Jun 23, 2026
e39798a
deploy: gate additive WHITEOUT mode on a COMPLETE core (Phase 3 only)
claude Jun 23, 2026
7f1e135
nextjs: sync uploader ancestor walk to 1024 depth; track contentHash …
claude Jun 23, 2026
2e6e5f2
kernel: index() is discovery-only — folder presence is placement-driv…
claude Jun 23, 2026
c28861a
Merge origin/main into worktree-raise-max-anchor-depth
claude Jun 23, 2026
2ecacd1
whiteout: apply getFilesAtPath negative terminal per-lens, not as a p…
claude Jun 23, 2026
80af1b0
kernel: lower MAX_ANCHOR_DEPTH 1024 → 256 (gas-safe deep placement) —…
claude Jun 23, 2026
59e8476
docs(ADR-0067): make the WHITEOUT seeding ban permanent; WHITEOUT is …
claude Jun 23, 2026
9d28399
specs(03): sync depth cap to 256 + index() discovery-only
claude Jun 23, 2026
96cf47f
Merge origin/main (PR #40: post-seal retry/smoke) into worktree-raise…
claude Jun 23, 2026
3e5f084
chore(deploy): regen deployedContracts.ts after main merge
claude Jun 23, 2026
52d4583
docs(deploy): add WHITEOUT to the freeze/burn runbooks (additive 10th…
claude Jun 23, 2026
02bd5e4
specs(04): delete an own shadowing override needs revoke + WHITEOUT, …
claude Jun 24, 2026
720c3b7
whiteout: add getActiveWhiteout(parent,attester,child) for on-chain u…
claude Jun 24, 2026
509b5a3
router: apply the whiteout terminal to the alias-container seed (segm…
claude Jun 24, 2026
69ac0b9
fileview: don't double per-item EAS reads in whiteout listings (read-…
claude Jun 24, 2026
0e364d6
deploy(views): only wire views to WhiteoutResolver when it has code o…
claude Jun 24, 2026
3e377e0
whiteout: guard getFilesAtPath against cursor-bypass; add WHITEOUT to…
claude Jun 24, 2026
82be7db
fileview: suppress the whole page when the listed folder is itself wh…
claude Jun 24, 2026
3ce996c
test(fork): update deploy/burn ceremony counts for the 7th resolver (…
claude Jun 24, 2026
70a3eea
lint(test): prettier-format BurnToImmutable.fork count assertion
claude Jun 24, 2026
8f640bd
fileview: parent-folder terminal must use the listing schema, not dat…
claude Jun 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion docs/DEPLOYMENT.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ This runbook produces a **mainnet-forward** Sepolia deployment: the Sepolia stru
- **1 SystemAccount proxy** (Transparent, CREATE3-deterministic): the neutral system write-identity (ADR-0053). Has its own `ProxyAdmin`. Separate from the resolver proxies; its burn requires additional verification (see burn checklist).
- **3 stateless views** (redeployable, in no UID): EFSRouter, EFSFileView, ListReader.
- **9 EAS schemas** registered against the proxy addresses: ANCHOR, PROPERTY, DATA(empty), PIN, TAG, MIRROR, LIST, LIST_ENTRY, REDIRECT. (SORT_INFO + EFSSortOverlay are **deferred**, added later additively.)
- **WHITEOUT — additive post-freeze (ADR-0055):** a **10th** schema + a **7th** resolver proxy (`WhiteoutResolver`, with its own `ProxyAdmin`) registered **additively** after the nine are live — NOT part of the original freeze set. Deployed via the additive path (`deploy-lib` `detectMissingResolvers`/`buildAdditivePlan`: deploys ONLY WhiteoutResolver + registers ONLY WHITEOUT, core untouched). When present, the deployed set is 7 resolver proxies + SystemAccount (**8** CREATE3 contracts / **8** ProxyAdmins) and 10 schemas; the burn ceremony covers WhiteoutResolver's ProxyAdmin (it is **not** `OwnableUpgradeable`, so no contract-owner renounce). Full sign-off row + burn coverage: `docs/SEPOLIA_FREEZE_TABLE.md` §WHITEOUT.

---

Expand Down Expand Up @@ -198,7 +199,7 @@ yarn deploy:efs-views --network localhost

**Upgrading a resolver later (from the Safe):** in Safe{Wallet}, propose a tx to `ProxyAdmin.upgradeAndCall(proxy, newImpl, 0x)`; sign; execute. Or script it with `@safe-global/protocol-kit`.

**Burn to immutable (pre-mainnet, after a ≥14-day soak):** the pre-burn checklist is in `docs/SEPOLIA_FREEZE_TABLE.md`; when satisfied, the Safe executes `ProxyAdmin.renounceOwnership()` per proxy — all **7** proxies (6 resolver proxies + SystemAccount proxy). **The contract-owner vs ProxyAdmin distinction (PR #24 50yr-review):** each proxied contract has two independent owners — its external ProxyAdmin (controls upgrades) and, where the logic is `Ownable`/`OwnableUpgradeable`, the contract's own owner (controls its setters). `ProxyAdmin.renounceOwnership()` does NOT zero the contract-owner; both must be renounced or the Safe retains live authority over a nominally "frozen" contract. So the burn also calls **`EFSIndexer.renounceOwnership()`** and **`MirrorResolver.renounceOwnership()`** — the two `OwnableUpgradeable` resolvers. This is load-bearing for EFSIndexer: its one-shot `setSortsAnchor(...)` is never set in this freeze (SORT_INFO deferred), so until the kernel owner is renounced a post-burn Safe could weld a permanent value into the immutable kernel. (EdgeResolver/ListResolver/ListEntryResolver/AliasResolver have no owner — config is `initialize()`-only — so they need no renounce.) For SystemAccount specifically: (1) call `SystemAccount.sealModules()` **before** burning, verify `SystemAccount.modulesSealed() == true` (permanently prevents any new system-writer module from being authorized post-burn — ADR-0053 "pre-burn only" membership); (2) burn its ProxyAdmin like the others; and (3) call `SystemAccount.renounceOwnership()` to zero its own `OwnableUpgradeable` owner. Post-burn verify `EFSIndexer.owner()==0`, `MirrorResolver.owner()==0`, `SystemAccount.owner()==0` (+ every ProxyAdmin), and that `setSortsAnchor`/`upgradeAndCall` now revert. Address + UID + data unchanged; logic frozen forever.
**Burn to immutable (pre-mainnet, after a ≥14-day soak):** the pre-burn checklist is in `docs/SEPOLIA_FREEZE_TABLE.md`; when satisfied, the Safe executes `ProxyAdmin.renounceOwnership()` per proxy — all **7** proxies (6 resolver proxies + SystemAccount proxy), or **8** once the additive WhiteoutResolver (ADR-0055) is deployed (7 resolver proxies + SystemAccount). **The contract-owner vs ProxyAdmin distinction (PR #24 50yr-review):** each proxied contract has two independent owners — its external ProxyAdmin (controls upgrades) and, where the logic is `Ownable`/`OwnableUpgradeable`, the contract's own owner (controls its setters). `ProxyAdmin.renounceOwnership()` does NOT zero the contract-owner; both must be renounced or the Safe retains live authority over a nominally "frozen" contract. So the burn also calls **`EFSIndexer.renounceOwnership()`** and **`MirrorResolver.renounceOwnership()`** — the two `OwnableUpgradeable` resolvers. This is load-bearing for EFSIndexer: its one-shot `setSortsAnchor(...)` is never set in this freeze (SORT_INFO deferred), so until the kernel owner is renounced a post-burn Safe could weld a permanent value into the immutable kernel. (EdgeResolver/ListResolver/ListEntryResolver/AliasResolver/WhiteoutResolver have no owner — config is `initialize()`-only — so they need no renounce; the additive WhiteoutResolver needs only its ProxyAdmin renounced in the per-proxy step above.) For SystemAccount specifically: (1) call `SystemAccount.sealModules()` **before** burning, verify `SystemAccount.modulesSealed() == true` (permanently prevents any new system-writer module from being authorized post-burn — ADR-0053 "pre-burn only" membership); (2) burn its ProxyAdmin like the others; and (3) call `SystemAccount.renounceOwnership()` to zero its own `OwnableUpgradeable` owner. Post-burn verify `EFSIndexer.owner()==0`, `MirrorResolver.owner()==0`, `SystemAccount.owner()==0` (+ every ProxyAdmin), and that `setSortsAnchor`/`upgradeAndCall` now revert. Address + UID + data unchanged; logic frozen forever.

---

Expand Down
Loading
Loading