Evidence
Proof log
Every claim loot makes is backed by a re-runnable script whose captured output is committed to the repo — the proof is content in the repo the thesis is about. Below is a card per proof over its verbatim run output; each one opens to the whole file, served from this page rather than linked away, so nothing here depends on access you may not have.
Watch a key be refused
Two identities are minted in this tab. A content key is sealed to the first one. Then both try to open it.
Nothing here is a recording and nothing is simulated — this is the same core the CLI runs, compiled to WebAssembly. The keys are different every run, so the hex below changes each time you press the button.
the engine loads when you press this — about 129 KB, once
What this does not show. This page cannot open a sealed object that was not addressed to a key it holds — that is the property, not a limitation of the demo. B's failure is the real error string from the real implementation, not a message this page wrote. Permissioning is key management, and the whole mechanism is those 80 bytes.
loot hosts loot — a sealed path is invisible to a non-keyholder
What this proves: loot's own private design docs live in the same repo as everything else and travel through the same relay — a fresh clone without the key materializes the rest of the tree and cannot see the sealed path, while the keyholder reads it. Visibility is per-content, enforced by key custody.
(1 sealed path(s) skipped — request a grant to access them) PASS: the agent's clone does NOT materialize the sealed path (docs/pitch/zk-host.md absent) PASS: the agent's clone DOES materialize internal content (CONTEXT.md present) PASS: loot reports sealed path(s) skipped for the agent (it holds the ciphertext, not the key) PASS: the dev's working tree HAS the sealed path present and readable (docs/pitch/zk-host.md) ALL CHECKS PASSED -- the sealed path is dev-visible, agent-invisible.
run output — docs/evidence/runs/sealed-path-demo.txt
=== loot sealed-from-agents path demo (section B, ADR 0026) === run started (utc): 2026-08-23 16:14:07Z relay: https://relay.millerbyte.com dev repo: C:\Users\conno\source\repos\loot sealed path: docs/pitch/zk-host.md (.lootattributes: docs/pitch/** restricted=connor) >>> building loot (release) >>> agent: clone the live relay as identity 'reviewer' (read-only) initialized empty loot repo at C:\Users\conno\AppData\Local\Temp\loot-sealed-path-1787501647\agent, identity = reviewer public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAoGy6KHtWcFycWPH6NKJx+kyAAdbQxiBKBwfIo0kTvq reviewer@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=reviewer` quickstart — paste this into a .lootattributes file to control visibility: # .lootattributes — control per-path visibility # internal — anyone with repo access can read # restricted — only named identities # embargoed — sealed until unix timestamp *.md internal .env restricted=alice RELEASE.md embargoed=1800000000 pulled from https://relay.millerbyte.com as reviewer: .claude/settings.json converged .claude/skills/afk-loop/SKILL.md relayed (sealed — you lack the key) .claude/skills/burn-secret/SKILL.md relayed (sealed — you lack the key) .claude/skills/diagnose-bounce/SKILL.md relayed (sealed — you lack the key) .claude/skills/diagnose-divergent/SKILL.md relayed (sealed — you lack the key) .claude/skills/diagnose-push-rejected/SKILL.md relayed (sealed — you lack the key) .claude/skills/diagnose-visibility/SKILL.md relayed (sealed — you lack the key) .claude/skills/grant-path/SKILL.md relayed (sealed — you lack the key) .claude/skills/land-change/SKILL.md relayed (sealed — you lack the key) .claude/skills/loot-runbooks/BINARIES.md relayed (sealed — you lack the key) .claude/skills/loot-runbooks/SKILL.md relayed (sealed — you lack the key) .claude/skills/maroon-identity/SKILL.md relayed (sealed — you lack the key) .claude/skills/mint-agent-identity/SKILL.md relayed (sealed — you lack the key) .claude/skills/op-restore/SKILL.md relayed (sealed — you lack the key) .claude/skills/review-quarantine/SKILL.md relayed (sealed — you lack the key) .claude/skills/rotate-key/SKILL.md relayed (sealed — you lack the key) .claude/skills/set-embargo/SKILL.md relayed (sealed — you lack the key) .claude/skills/ticket-to-lane/SKILL.md relayed (sealed — you lack the key) .gitattributes relayed (sealed — you lack the key) .github/workflows/publish-r2.yml converged .github/workflows/release.yml converged .github/workflows/site-main.yml converged .github/workflows/smoke-install.yml converged .github/workflows/sweep-artifacts.yml converged .github/workflows/test-main.yml relayed (sealed — you lack the key) .gitignore relayed (sealed — you lack the key) .lootattributes relayed (sealed — you lack the key) .lootignore relayed (sealed — you lack the key) .vercelignore relayed (sealed — you lack the key) AGENTS.md relayed (sealed — you lack the key) CONTEXT.md relayed (sealed — you lack the key) Cargo.lock relayed (sealed — you lack the key) Cargo.toml relayed (sealed — you lack the key) LICENSE-APACHE converged LICENSE-MIT converged README.md relayed (sealed — you lack the key) crates/loot-bench/Cargo.toml relayed (sealed — you lack the key) crates/loot-bench/src/lib.rs relayed (sealed — you lack the key) crates/loot-cli/Cargo.toml relayed (sealed — you lack the key) crates/loot-cli/src/bisect.rs relayed (sealed — you lack the key) crates/loot-cli/src/blame.rs relayed (sealed — you lack the key) crates/loot-cli/src/disclosure.rs relayed (sealed — you lack the key) crates/loot-cli/src/doctor.rs relayed (sealed — you lack the key) crates/loot-cli/src/draft.rs converged crates/loot-cli/src/dup.rs relayed (sealed — you lack the key) crates/loot-cli/src/emit.rs relayed (sealed — you lack the key) crates/loot-cli/src/error.rs relayed (sealed — you lack the key) crates/loot-cli/src/evolog.rs relayed (sealed — you lack the key) crates/loot-cli/src/ferry.rs relayed (sealed — you lack the key) crates/loot-cli/src/flags.rs relayed (sealed — you lack the key) crates/loot-cli/src/git_mirror.rs relayed (sealed — you lack the key) crates/loot-cli/src/grep.rs converged crates/loot-cli/src/history.rs relayed (sealed — you lack the key) crates/loot-cli/src/hunks.rs relayed (sealed — you lack the key) crates/loot-cli/src/kv.rs converged crates/loot-cli/src/ledger.rs relayed (sealed — you lack the key) crates/loot-cli/src/lib.rs relayed (sealed — you lack the key) crates/loot-cli/src/main.rs relayed (sealed — you lack the key) crates/loot-cli/src/mergetool.rs relayed (sealed — you lack the key) crates/loot-cli/src/pick.rs converged crates/loot-cli/src/policy.rs relayed (sealed — you lack the key) crates/loot-cli/src/position.rs relayed (sealed — you lack the key) crates/loot-cli/src/reconcile.rs relayed (sealed — you lack the key) crates/loot-cli/src/render.rs relayed (sealed — you lack the key) crates/loot-cli/src/tar.rs converged crates/loot-cli/src/textdiff.rs relayed (sealed — you lack the key) crates/loot-cli/src/tutorial.rs relayed (sealed — you lack the key) crates/loot-cli/src/unlock.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/attest.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/change.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/conflicts.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/custody.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/grants.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/history.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/identity.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/lane.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/mod.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/oplog.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/relay.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/repo.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/store.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/sync.rs relayed (sealed — you lack the key) crates/loot-cli/src/verbs/view.rs converged crates/loot-cli/src/view.rs relayed (sealed — you lack the key) crates/loot-cli/src/workspace/lanes.rs relayed (sealed — you lack the key) crates/loot-cli/src/workspace/reconcile.rs relayed (sealed — you lack the key) crates/loot-cli/src/workspace/refit.rs relayed (sealed — you lack the key) crates/loot-cli/src/workspace/reports.rs relayed (sealed — you lack the key) crates/loot-cli/src/workspace/take.rs relayed (sealed — you lack the key) crates/loot-cli/src/workspace.rs relayed (sealed — you lack the key) crates/loot-cli/tests/broken_pipe.rs converged crates/loot-cli/tests/cli_smoke.rs relayed (sealed — you lack the key) crates/loot-cli/tests/custody_lock.rs relayed (sealed — you lack the key) crates/loot-cli/tests/describe_contention.rs relayed (sealed — you lack the key) crates/loot-cli/tests/docs_demo.rs relayed (sealed — you lack the key) crates/loot-cli/tests/emit_snapshot.rs relayed (sealed — you lack the key) crates/loot-cli/tests/forge_push.rs relayed (sealed — you lack the key) crates/loot-cli/tests/line_endings.rs relayed (sealed — you lack the key) crates/loot-cli/tests/runbook_portability.rs converged crates/loot-cli/tests/skill_commands.rs relayed (sealed — you lack the key) crates/loot-cli/tests/sparse_view.rs converged crates/loot-cli/tests/sync_resume.rs relayed (sealed — you lack the key) crates/loot-cli/tests/tutorial.rs relayed (sealed — you lack the key) crates/loot-cli/tests/workspace_publish_guard.rs relayed (sealed — you lack the key) crates/loot-codec/Cargo.toml relayed (sealed — you lack the key) crates/loot-codec/src/attestation.rs converged crates/loot-codec/src/bundle_codec.rs relayed (sealed — you lack the key) crates/loot-codec/src/change_id.rs relayed (sealed — you lack the key) crates/loot-codec/src/envelope.rs converged crates/loot-codec/src/format.rs relayed (sealed — you lack the key) crates/loot-codec/src/hex.rs converged crates/loot-codec/src/key_seal.rs converged crates/loot-codec/src/lib.rs relayed (sealed — you lack the key) crates/loot-codec/src/purge.rs relayed (sealed — you lack the key) crates/loot-codec/src/sealed.rs relayed (sealed — you lack the key) crates/loot-codec/src/treepath.rs converged crates/loot-core/Cargo.toml relayed (sealed — you lack the key) crates/loot-core/examples/patched-client.rs relayed (sealed — you lack the key) crates/loot-core/src/attestation.rs converged crates/loot-core/src/bridge.rs relayed (sealed — you lack the key) crates/loot-core/src/bundle_codec.rs converged crates/loot-core/src/buoy.rs relayed (sealed — you lack the key) crates/loot-core/src/burn.rs relayed (sealed — you lack the key) crates/loot-core/src/converge.rs relayed (sealed — you lack the key) crates/loot-core/src/deposits.rs converged crates/loot-core/src/engine/change_graph.rs relayed (sealed — you lack the key) crates/loot-core/src/engine/custody.rs relayed (sealed — you lack the key) crates/loot-core/src/engine/graph_view.rs converged crates/loot-core/src/engine/merge.rs relayed (sealed — you lack the key) crates/loot-core/src/engine/negotiation.rs relayed (sealed — you lack the key) crates/loot-core/src/engine/object_store.rs relayed (sealed — you lack the key) crates/loot-core/src/engine/persist_codec.rs relayed (sealed — you lack the key) crates/loot-core/src/engine/surface.rs relayed (sealed — you lack the key) crates/loot-core/src/engine.rs relayed (sealed — you lack the key) crates/loot-core/src/escrow.rs relayed (sealed — you lack the key) crates/loot-core/src/format.rs converged crates/loot-core/src/hex.rs converged crates/loot-core/src/lib.rs relayed (sealed — you lack the key) crates/loot-core/src/liveness.rs relayed (sealed — you lack the key) crates/loot-core/src/manifest.rs relayed (sealed — you lack the key) crates/loot-core/src/oplog.rs relayed (sealed — you lack the key) crates/loot-core/src/sealed.rs converged crates/loot-core/src/store.rs relayed (sealed — you lack the key) crates/loot-core/src/testkit.rs relayed (sealed — you lack the key) crates/loot-core/src/verdict.rs relayed (sealed — you lack the key) crates/loot-core/tests/merge_corpus.rs converged crates/loot-first/Cargo.toml relayed (sealed — you lack the key) crates/loot-first/src/forge.rs relayed (sealed — you lack the key) crates/loot-first/src/harbor.rs relayed (sealed — you lack the key) crates/loot-first/src/hygiene.rs relayed (sealed — you lack the key) crates/loot-first/src/ledger.rs converged crates/loot-first/src/lib.rs relayed (sealed — you lack the key) crates/loot-first/src/main.rs relayed (sealed — you lack the key) crates/loot-first/src/orchestrator.rs relayed (sealed — you lack the key) crates/loot-first/src/policy.rs relayed (sealed — you lack the key) crates/loot-first/tests/doc_links.rs converged crates/loot-first/tests/exit_codes.rs relayed (sealed — you lack the key) crates/loot-first/tests/line_endings.rs converged crates/loot-first/tests/runbook_portability.rs converged crates/loot-forge/Cargo.toml relayed (sealed — you lack the key) crates/loot-forge/Dockerfile relayed (sealed — you lack the key) crates/loot-forge/migrations/0002_grant_inbox.sql converged crates/loot-forge/migrations/0003_read_views.sql converged crates/loot-forge/migrations/0004_change_authored_at.sql converged crates/loot-forge/migrations/0005_published_index.sql converged crates/loot-forge/migrations/0006_version_stack.sql converged crates/loot-forge/migrations/0007_identity_writer.sql converged crates/loot-forge/migrations/0008_retired_key_alias.sql converged crates/loot-forge/migrations/0009_owner_read.sql converged crates/loot-forge/migrations/0010_tree_entry_by_object_manifest.sql converged crates/loot-forge/src/blob.rs relayed (sealed — you lack the key) crates/loot-forge/src/conformance.rs relayed (sealed — you lack the key) crates/loot-forge/src/error.rs relayed (sealed — you lack the key) crates/loot-forge/src/grant.rs converged crates/loot-forge/src/inbox.rs relayed (sealed — you lack the key) crates/loot-forge/src/ingest.rs relayed (sealed — you lack the key) crates/loot-forge/src/lib.rs relayed (sealed — you lack the key) crates/loot-forge/src/main.rs relayed (sealed — you lack the key) crates/loot-forge/src/memory.rs relayed (sealed — you lack the key) crates/loot-forge/src/model.rs relayed (sealed — you lack the key) crates/loot-forge/src/pg/inbox.rs converged crates/loot-forge/src/pg/meta.rs relayed (sealed — you lack the key) crates/loot-forge/src/pg/migrate.rs relayed (sealed — you lack the key) crates/loot-forge/src/pg/mod.rs relayed (sealed — you lack the key) crates/loot-forge/src/pg/pool.rs converged crates/loot-forge/src/pg/tests.rs relayed (sealed — you lack the key) crates/loot-forge/src/pg/tls.rs converged crates/loot-forge/src/publish.rs relayed (sealed — you lack the key) crates/loot-forge/src/purge.rs relayed (sealed — you lack the key) crates/loot-forge/src/s3.rs relayed (sealed — you lack the key) crates/loot-forge/src/serve.rs relayed (sealed — you lack the key) crates/loot-forge/src/server.rs relayed (sealed — you lack the key) crates/loot-forge/src/store.rs relayed (sealed — you lack the key) crates/loot-forge/src/sweep.rs relayed (sealed — you lack the key) crates/loot-forge/tests/account_tier.rs relayed (sealed — you lack the key) crates/loot-forge/tests/http.rs relayed (sealed — you lack the key) crates/loot-forge/tests/ingest_and_serve.rs relayed (sealed — you lack the key) crates/loot-identity/Cargo.toml relayed (sealed — you lack the key) crates/loot-identity/src/bip39-english.txt converged crates/loot-identity/src/key_seal.rs relayed (sealed — you lack the key) crates/loot-identity/src/lib.rs relayed (sealed — you lack the key) crates/loot-identity/src/mnemonic.rs relayed (sealed — you lack the key) crates/loot-identity/src/peers.rs relayed (sealed — you lack the key) crates/loot-identity/src/seed_seal.rs converged crates/loot-net/Cargo.toml relayed (sealed — you lack the key) crates/loot-net/src/args.rs relayed (sealed — you lack the key) crates/loot-net/src/auth.rs converged crates/loot-net/src/forge.rs relayed (sealed — you lack the key) crates/loot-net/src/lib.rs relayed (sealed — you lack the key) crates/loot-net/src/mailbox.rs relayed (sealed — you lack the key) crates/loot-net/src/relay_store.rs relayed (sealed — you lack the key) crates/loot-net/src/storage.rs relayed (sealed — you lack the key) crates/loot-net/tests/fault_injection.rs relayed (sealed — you lack the key) crates/loot-net/tests/relay_maintenance.rs relayed (sealed — you lack the key) crates/loot-net/tests/sync_round_trip.rs relayed (sealed — you lack the key) crates/loot-perf/Cargo.toml relayed (sealed — you lack the key) crates/loot-perf/examples/offer_corpus.rs relayed (sealed — you lack the key) crates/loot-perf/src/bin/loot-perf-cli.rs relayed (sealed — you lack the key) crates/loot-perf/src/bin/loot-perf-gate.rs relayed (sealed — you lack the key) crates/loot-perf/src/cli.rs relayed (sealed — you lack the key) crates/loot-perf/src/fixture.rs relayed (sealed — you lack the key) crates/loot-perf/src/gate.rs relayed (sealed — you lack the key) crates/loot-perf/src/lib.rs relayed (sealed — you lack the key) crates/loot-perf/src/load.rs converged crates/loot-perf/src/measure.rs relayed (sealed — you lack the key) crates/loot-perf/src/pinned.rs relayed (sealed — you lack the key) crates/loot-perf/src/record.rs relayed (sealed — you lack the key) crates/loot-relay-contract/Cargo.toml converged crates/loot-relay-contract/src/lib.rs relayed (sealed — you lack the key) crates/loot-relay-contract/tests/fs_backend.rs relayed (sealed — you lack the key) crates/loot-relay-contract/tests/the_suite_asks_every_rule.rs converged crates/loot-relayd/Cargo.toml relayed (sealed — you lack the key) crates/loot-relayd/src/lib.rs relayed (sealed — you lack the key) crates/loot-relayd/src/main.rs relayed (sealed — you lack the key) crates/loot-relayd/tests/object_store_relay.rs relayed (sealed — you lack the key) crates/loot-revset/Cargo.toml relayed (sealed — you lack the key) crates/loot-revset/src/error.rs converged crates/loot-revset/src/eval.rs relayed (sealed — you lack the key) crates/loot-revset/src/lexer.rs converged crates/loot-revset/src/lib.rs relayed (sealed — you lack the key) crates/loot-revset/src/parser.rs converged crates/loot-revset/tests/revset.rs relayed (sealed — you lack the key) crates/loot-s3/Cargo.toml converged crates/loot-s3/src/lib.rs relayed (sealed — you lack the key) crates/loot-wasm/Cargo.toml relayed (sealed — you lack the key) crates/loot-wasm/src/lib.rs relayed (sealed — you lack the key) crates/loot-wasm/tests/parity.rs relayed (sealed — you lack the key) crates/spike-crdt/Cargo.toml relayed (sealed — you lack the key) crates/spike-crdt/src/lib.rs relayed (sealed — you lack the key) crates/spike-dag/Cargo.toml relayed (sealed — you lack the key) crates/spike-dag/src/lib.rs relayed (sealed — you lack the key) dist-workspace.toml relayed (sealed — you lack the key) docs/adr/0001-per-content-decrypt-then-merge-convergence.md relayed (sealed — you lack the key) docs/adr/0002-encrypted-dag-foundation.md relayed (sealed — you lack the key) docs/adr/0003-sealed-content-module-keyring-custody.md relayed (sealed — you lack the key) docs/adr/0004-drop-plaintext-dedup-equality-oracle.md relayed (sealed — you lack the key) docs/adr/0005-cli-slice-persistence-and-attributes.md relayed (sealed — you lack the key) docs/adr/0006-workspace-auto-snapshot.md relayed (sealed — you lack the key) docs/adr/0007-embargo-escrow-module.md relayed (sealed — you lack the key) docs/adr/0008-grant-log-and-targeted-key-bundles.md relayed (sealed — you lack the key) docs/adr/0009-two-level-revocation.md relayed (sealed — you lack the key) docs/adr/0010-forward-maroon-implementation.md relayed (sealed — you lack the key) docs/adr/0011-relay-stow-append-only.md relayed (sealed — you lack the key) docs/adr/0012-per-object-loose-storage.md relayed (sealed — you lack the key) docs/adr/0013-named-remotes-and-grant-bundle-delivery.md relayed (sealed — you lack the key) docs/adr/0014-identity-keypairs-openssh-ed25519.md relayed (sealed — you lack the key) docs/adr/0015-grant-authentication-and-trust.md relayed (sealed — you lack the key) docs/adr/0016-identity-portability-and-rotation.md relayed (sealed — you lack the key) docs/adr/0017-repostore-loot-layout.md relayed (sealed — you lack the key) docs/adr/0018-signed-changes-authored-history.md relayed (sealed — you lack the key) docs/adr/0019-format-versioning-and-compatibility.md relayed (sealed — you lack the key) docs/adr/0020-compress-public-content.md relayed (sealed — you lack the key) docs/adr/0021-object-level-wants-negotiation.md relayed (sealed — you lack the key) docs/adr/0022-concurrent-agent-model-docks.md relayed (sealed — you lack the key) docs/adr/0023-agent-facing-machine-output.md relayed (sealed — you lack the key) docs/adr/0024-resumable-transfer.md relayed (sealed — you lack the key) docs/adr/0025-buoy-resolver.md relayed (sealed — you lack the key) docs/adr/0026-agent-identity-model.md relayed (sealed — you lack the key) docs/adr/0027-hard-embargo-timed-sealed-grants.md relayed (sealed — you lack the key) docs/adr/0028-git-interop-bridge.md relayed (sealed — you lack the key) docs/adr/0029-stable-change-ids.md relayed (sealed — you lack the key) docs/adr/0030-implicit-auto-snapshot-and-verb-surface.md relayed (sealed — you lack the key) docs/adr/0031-operation-log-and-undo.md relayed (sealed — you lack the key) docs/adr/0032-amend-supersession-and-loot-edit.md relayed (sealed — you lack the key) docs/adr/0033-projecting-amended-changes-to-git.md relayed (sealed — you lack the key) docs/adr/0034-sealed-lanes-over-a-shared-store.md relayed (sealed — you lack the key) docs/adr/0035-lane-lifecycle.md relayed (sealed — you lack the key) docs/adr/0036-harbor-serialized-integrator.md relayed (sealed — you lack the key) docs/adr/0037-loot-product-site-and-install.md relayed (sealed — you lack the key) docs/adr/0038-burn-and-the-mis-seal-gate.md relayed (sealed — you lack the key) docs/adr/0039-review-is-a-pure-projection.md relayed (sealed — you lack the key) docs/adr/0040-loot-codec-and-the-wasm-core.md converged docs/adr/0041-public-multi-tenant-loot-forge.md relayed (sealed — you lack the key) docs/adr/0042-sealable-tickets-in-the-repos-own-tree.md converged docs/adr/0043-authored-timestamps-as-a-signed-label.md converged docs/adr/0044-three-way-content-merge-at-the-converge-seam.md relayed (sealed — you lack the key) docs/adr/0045-github-stays-private-and-the-download-path-moves-to-r2.md relayed (sealed — you lack the key) docs/adr/0046-forge-backups-are-operator-recovery-and-a-restore-replays-the-revocation-journal.md relayed (sealed — you lack the key) docs/adr/0047-the-lanes-hold-position-scoped-custody.md relayed (sealed — you lack the key) docs/adr/0048-a-relay-is-measured-not-capped.md relayed (sealed — you lack the key) docs/adr/0049-deploy-releases-build-and-publish-off-github.md relayed (sealed — you lack the key) docs/adr/0050-a-land-runs-from-a-lane.md relayed (sealed — you lack the key) docs/adr/0051-tree-paths-are-stored-with-one-separator.md converged docs/adr/0052-a-relay-retires-a-head-never-content.md converged docs/adr/0053-the-bridge-learns-landed-main-from-the-checkout.md relayed (sealed — you lack the key) docs/adr/0054-an-empty-holder-list-is-unknown-not-nobody.md converged docs/adr/0055-a-land-gates-the-tree-it-publishes.md converged docs/adr/0056-a-store-knows-which-machine-materialized-it.md relayed (sealed — you lack the key) docs/adr/0057-a-push-deposits-this-identitys-own-keys.md relayed (sealed — you lack the key) docs/adr/0058-uncaptured-primary-work-leaves-by-explicit-take.md converged docs/adr/0059-credentials-arrive-by-file-the-environment-stays-the-dev-path.md relayed (sealed — you lack the key) docs/adr/0060-the-public-bucket-carries-binaries-not-source.md relayed (sealed — you lack the key) docs/adr/0061-an-afk-run-approves-its-own-review-prs.md converged docs/adr/0061-the-forges-door-is-a-custody-list-not-a-capacity-gate.md converged docs/adr/0062-an-afk-run-approves-its-own-review-prs.md converged docs/adr/0063-lane-merge-is-retired-a-land-is-the-only-fold.md converged docs/adr/0063-loot-is-not-on-crates-io-and-its-names-are-held-anyway.md converged docs/adr/0064-loot-is-not-on-crates-io-and-its-names-are-held-anyway.md relayed (sealed — you lack the key) docs/adr/0065-a-hygiene-check-runs-at-the-moment-that-makes-it-true.md relayed (sealed — you lack the key) docs/adr/0066-the-alpha-promises-the-repo-not-the-interface.md relayed (sealed — you lack the key) docs/adr/0067-the-install-smoke-gates-staged-bytes-and-detects-published-ones.md relayed (sealed — you lack the key) docs/adr/0068-custody-at-rest-is-sealed-to-your-own-key-behind-an-optional-passphrase.md relayed (sealed — you lack the key) docs/adr/0069-internal-stays-the-default-tier.md relayed (sealed — you lack the key) docs/adr/0070-an-object-store-relay-is-a-second-deployable-the-cli-ships-no-driver.md relayed (sealed — you lack the key) docs/adr/0071-the-site-gate-is-a-build-and-a-per-surface-byte-ceiling.md relayed (sealed — you lack the key) docs/agents/concurrent.md relayed (sealed — you lack the key) docs/agents/identity.md relayed (sealed — you lack the key) docs/agents/issue-tracker.md relayed (sealed — you lack the key) docs/agents/workflow.md relayed (sealed — you lack the key) docs/bakeoff/index.html relayed (sealed — you lack the key) docs/benchmarks/level-c-proof.md relayed (sealed — you lack the key) docs/benchmarks/series/028826355afe53046bef50b0c1c8c9e4.json converged docs/benchmarks/series/046f7b9ecdc1d70f5f5c877e834dc22e.json converged docs/benchmarks/series/05cd774bda937b9132f78e2e4caec6a9.json converged docs/benchmarks/series/05deb2339e2b0d22f7349c25adda3f9a.json converged docs/benchmarks/series/061a50b881bf7575de05894d1fd84a17.json converged docs/benchmarks/series/063031023c690cc4b4ac36627e3a6252.json converged docs/benchmarks/series/0630f74d5a8214f6272dcf748625922c.json converged docs/benchmarks/series/09e4e9b77df1e8fc4f53350faa7dc0a0.json converged docs/benchmarks/series/0a0a999ee7cb7125a5dba08780cf0154.json converged docs/benchmarks/series/0a0d3e37f6c1906f062baf76e5d0bdb5.json converged docs/benchmarks/series/0a4afa36500e4f2c4e4cf1e67a146dee.json converged docs/benchmarks/series/0c69c26d6bf8ece417d0e5f2893bde34.json converged docs/benchmarks/series/0d9f140dab75dc65ccba8afd7b5c65b0.json converged docs/benchmarks/series/0e5b19b49b7a9e8abcb0b3683713a761.json converged docs/benchmarks/series/0ed6408ad9ee09599e1d6e28db8b3d73.json converged docs/benchmarks/series/11e40e4d65e7a51c05ae9cf74540a331.json converged docs/benchmarks/series/12b4a2b80cf38f203528ab2f8fcb7a4e.json converged docs/benchmarks/series/12f76e1bc780456f166dc520a1d8c5d8.json converged docs/benchmarks/series/13d67aca15d5627aa1c58e3cac7c189b.json converged docs/benchmarks/series/150fdfd2c40e075d2f6e05eeb2e9efaf.json converged docs/benchmarks/series/15eb5a6a286cd317f6bcfd96244b5052.json converged docs/benchmarks/series/15fc913af64af9ee5ee36697324ac209.json converged docs/benchmarks/series/16f779bd952e8e300b326cab50a04644.json converged docs/benchmarks/series/187ab50109449e31cdbccb676b367120.json converged docs/benchmarks/series/19e8f429081483bb09da68b414832dbc.json converged docs/benchmarks/series/1bf06c2fc99d2ce59c81ead4ce6c3cdd.json converged docs/benchmarks/series/1c7e75bc30f53ac952a7b84da2267fbe.json converged docs/benchmarks/series/1caf8f0479e90be97ca47ee8807c1e9a.json converged docs/benchmarks/series/1f4f5ebff436d27c3e5e879b04888389.json converged docs/benchmarks/series/20cc3e7e913e0e3fb7200009a5ca6044.json converged docs/benchmarks/series/2238a37b610a70c0c4a959358dab514e.json converged docs/benchmarks/series/226201ea4b7e69ead709d37776748a4c.json converged docs/benchmarks/series/237975a79b6fe5c1de263d6191cb0b7e.json converged docs/benchmarks/series/239cff6bba46860f6ecab32915d823fc.json converged docs/benchmarks/series/23bde6c42588a5176badbf91d029dea1.json converged docs/benchmarks/series/28c010bff9a1ff8a3c27d63c7112d9b6.json converged docs/benchmarks/series/28ec5090aada67162f07d4c8d3e549c1.json converged docs/benchmarks/series/29105c284535b16a4434a441d5a45c19.json converged docs/benchmarks/series/2a13476b871c9aa3415c775f9f3df9ad.json converged docs/benchmarks/series/2d3f02ceae3c90282d236e2da70b5f23.json relayed (sealed — you lack the key) docs/benchmarks/series/2e7113f6990841f96592b68d94ab9b14.json converged docs/benchmarks/series/2e9092b38de3d5f317f17fe95ca9a769.json converged docs/benchmarks/series/2f6afeafbafe22ebdf59d30d8dd34b42.json converged docs/benchmarks/series/308669e881929362f54f576b341d0ff5.json converged docs/benchmarks/series/30b86fe93b6b0c047b0194ea5c5aad6b.json converged docs/benchmarks/series/314a197ad9d8c644e715da623529f63f.json converged docs/benchmarks/series/31aedc3b86c19b1259a4f7318b6a24ec.json converged docs/benchmarks/series/3232c95d09276a447505291131e1fefd.json converged docs/benchmarks/series/33a0d489d7f2e2942b02a9eee3f56dc8.json converged docs/benchmarks/series/382645c7c19c103e52d810a10cd7f290.json converged docs/benchmarks/series/39b8b1966801a51dbad161133db6260c.json converged docs/benchmarks/series/3d76c7397da07b4c938c3e2077837cd5.json converged docs/benchmarks/series/3fc15007f3258b663654678d50f7ffea.json converged docs/benchmarks/series/4040bc822da0d978c9b98eff6d68a016.json converged docs/benchmarks/series/40c63a46753cfe53a1af155b090ade4d.json converged docs/benchmarks/series/418c29ae5cb594de966a7b6fbb13a1cf.json converged docs/benchmarks/series/42dea0586072d4410de16e45ffa47c69.json converged docs/benchmarks/series/4386d067201c1e75956184e927fceaba.json converged docs/benchmarks/series/445e542c803bb956ecbbbf628b937f72.json converged docs/benchmarks/series/479076dcfde507e7b74f9957bff09599.json converged docs/benchmarks/series/482b98a5eaeca16b63ab554357021a8c.json converged docs/benchmarks/series/48a504f4d3ea51cc423657c7c735087d.json converged docs/benchmarks/series/49f6a68c35c55158ff751420b8a5a99e.json converged docs/benchmarks/series/4a51266a8eacbb818bbc0c22811eeaa5.json converged docs/benchmarks/series/4ae36e3ac8b55a8eddf10f005107f16b.json converged docs/benchmarks/series/4c32c1e407af4755a59464c726f8ab0f.json converged docs/benchmarks/series/4d6d5b819274aea7b833af8fe933751e.json converged docs/benchmarks/series/519290b69a6849f04c7fc5402ecf75ff.json converged docs/benchmarks/series/51afe3e37a8f0543fd4fc95e97e817c4.json converged docs/benchmarks/series/52869b25ee6388b901edd5d9a85c1a60.json converged docs/benchmarks/series/53673e5df58804f4da23ee6515f068da.json converged docs/benchmarks/series/559ca38a99733ce284d2816e57298aa2.json converged docs/benchmarks/series/5a09a5cf0ab34b3d1c46f9a368036eb6.json converged docs/benchmarks/series/5a74641c3a26b2e66eccf0fc81462033.json converged docs/benchmarks/series/5acd6c2d5010d65d71ba378ca84ca87d.json converged docs/benchmarks/series/5c53b6515bdd708cecfa846a714a781e.json converged docs/benchmarks/series/5d71b9982451702788b8a4997f5fb23f.json converged docs/benchmarks/series/5dab0ef3553db2d049fc02de3dfd46e9.json converged docs/benchmarks/series/601f7fae489529fbd78c218163354682.json converged docs/benchmarks/series/6042a9bd5eb0b4b32c1671ffc065de7e.json converged docs/benchmarks/series/616a3b7459d86c2f8dedd2328a686700.json converged docs/benchmarks/series/6203fa4267075e0f83498a598e8c2bd0.json converged docs/benchmarks/series/62f2809ec9af2b2c82376c88debef144.json converged docs/benchmarks/series/666bd9140d485f9c1706d4c5abf0d6c1.json converged docs/benchmarks/series/67c0d70547abbc2640bb69201e1df9ff.json converged docs/benchmarks/series/67cbcf09aee8b66111c9e942c3f44eaf.json converged docs/benchmarks/series/681642ea872702054990ac41b777dd14.json converged docs/benchmarks/series/68bc0ff8c6c4c79125825510de0a14de.json converged docs/benchmarks/series/6b16101bca7fe39afa61713c7086a00c.json converged docs/benchmarks/series/6b4673bc551d8fbe64556789defb31b0.json converged docs/benchmarks/series/6d8c826443187a44739ad4682a232e7a.json converged docs/benchmarks/series/735dd300664098092c8479c9820bfbee.json converged docs/benchmarks/series/73d793f864728346702b4f766ffe6ecb.json converged docs/benchmarks/series/74a4d5cb1abbde542100399ac9e4d609.json converged docs/benchmarks/series/751f1485596090235cb3d869be93906c.json converged docs/benchmarks/series/7730460d7b4ece4c6e11e49e3dd2928a.json converged docs/benchmarks/series/77c04ee442e1861d4091d3cb5ed221b5.json converged docs/benchmarks/series/794a8b73e013ebecd6ad5b21a8bbc328.json converged docs/benchmarks/series/79ac53bbc01d821cd0dbce2874c804af.json converged docs/benchmarks/series/7af080758e50e28ebd39d0a70986a020.json converged docs/benchmarks/series/7d787f08b695a8e086fa4a8e11259f6d.json converged docs/benchmarks/series/7ed47eda57bb5baf88f8c2408d7d6dab.json converged docs/benchmarks/series/7ef26f633466df80cd131cc63082a027.json converged docs/benchmarks/series/80091cd23238c47a2d4827ab54778ed4.json converged docs/benchmarks/series/809b8bb3cf50b4aabbb36a1fbbdcbe7e.json converged docs/benchmarks/series/80e81d847cc2569be709a4e59a98f6af.json converged docs/benchmarks/series/80f3dd0ff1a3a03d7e528235c7e6c586.json converged docs/benchmarks/series/814d1fcfe650d279c8b2184cd0e5548b.json converged docs/benchmarks/series/82982d8206b46ec3d2db6719fa42530a.json converged docs/benchmarks/series/82fbb9eb29afcbad962719ce7a1ac672.json converged docs/benchmarks/series/8409e44d9d8b2415b09b2c0fc437038f.json converged docs/benchmarks/series/841ec5f40b97a0451c0a83d7ee78aa13.json converged docs/benchmarks/series/8611c6f2b378c55d5452ebab1984b8ed.json converged docs/benchmarks/series/8b8decb06438ea7d8a7d0910ed6adfbe.json converged docs/benchmarks/series/8d103ea93de36dfa838bc10a864ce566.json converged docs/benchmarks/series/8dd5567ddc93db6b4a6a0765547e2397.json converged docs/benchmarks/series/8fbc3f3b8c70db3a1ec7fa14beafe7e6.json converged docs/benchmarks/series/9177bc510c951d747829680d02b3b2bc.json converged docs/benchmarks/series/926464bd1aab63ba0566fb59b2585e47.json converged docs/benchmarks/series/9278bcddee4d9c10a93d2b00866bfec7.json converged docs/benchmarks/series/95020bb3489585777a77a4d2692f45af.json converged docs/benchmarks/series/956fce0c46ee56dc537af5ef56d781f6.json converged docs/benchmarks/series/98631b8e2a13b877ef37869f2ce5c7b0.json converged docs/benchmarks/series/986ab45e0492e87b09be5c444154cf27.json converged docs/benchmarks/series/990c5cd54f3d07bdc1450bd9e83eccdb.json converged docs/benchmarks/series/9b4d823518270ec35967a490ffa568ad.json converged docs/benchmarks/series/9d251c9426ed7abecb886ace50d6cb69.json converged docs/benchmarks/series/9e2a53e9f680e272ed2d5532fd97b5fc.json converged docs/benchmarks/series/9e775525f5d207a00a544841a5eed366.json converged docs/benchmarks/series/a0339599164efafb37854728d616ebf7.json converged docs/benchmarks/series/a31a0fb8fc301dd662fa745b1320c70f.json converged docs/benchmarks/series/a389b7abde0979680eef738f15411395.json converged docs/benchmarks/series/a7f1ee0f442da5a8ebf18113e8875bab.json converged docs/benchmarks/series/a8bc4435292e16ad497064f5d633fd68.json converged docs/benchmarks/series/aafc18d6c879b352f4bd242c0a17a44b.json converged docs/benchmarks/series/ab647cde7faa215725418831fdc1dc4d.json converged docs/benchmarks/series/ae0a800e9b0718871941c83d92549040.json converged docs/benchmarks/series/aea7632cae3cf92b34974c670b109c18.json converged docs/benchmarks/series/b13c688922bda6fd11ac756df47af803.json converged docs/benchmarks/series/b23ed6218152821e5151257649d8e6e2.json converged docs/benchmarks/series/b349edf62b082e3b8c05b2331ae51b96.json converged docs/benchmarks/series/b40e3a0f43fa5a15fd510086abe5ae80.json converged docs/benchmarks/series/b4862b264b4ec20a771fc729d82c5a79.json converged docs/benchmarks/series/b5f2c1da4db10382876c7648a5ae1316.json converged docs/benchmarks/series/b733ac785ae9f0c15a924fd9b76b73a0.json converged docs/benchmarks/series/b74b292392962bd6218a7fdcc23445bb.json converged docs/benchmarks/series/b781c7bfe9431361963754880b750969.json converged docs/benchmarks/series/b949ef859c28d21bf445987cd9a53fc1.json converged docs/benchmarks/series/bb58ed9a272f218a4bc58ce744f29f32.json converged docs/benchmarks/series/bc350acbd3108d5e427ba4778f4e3ecd.json converged docs/benchmarks/series/bfe705ec01139b7124f0ee9d39bfc6c8.json converged docs/benchmarks/series/bffd8ad24ab792e12bdaca5171446d2d.json converged docs/benchmarks/series/c022c440a3b2cce037cb20ef334bed4b.json converged docs/benchmarks/series/c1b77fcce90ac884a935f22dd70a1575.json converged docs/benchmarks/series/c23d9e2cf01fd9509ff97f125b2e6eb5.json converged docs/benchmarks/series/c2b58d0b59e24e6ab307a7df7ea2c2ac.json converged docs/benchmarks/series/c5e6e1e0eee3406e68197af87bd662a3.json converged docs/benchmarks/series/c64b8806b48153a3596c4f68a57bd2bc.json converged docs/benchmarks/series/c81470b1216e6b16666399fcf9a5afba.json converged docs/benchmarks/series/c95a07150672624c22988255456bd83a.json converged docs/benchmarks/series/cec6b2e92e2042203ae643d1d664c2ab.json converged docs/benchmarks/series/cf3501296e9dbb153fc55961c5e766e9.json converged docs/benchmarks/series/d1454de7f4c42583ecf43ca7c06bf7b7.json converged docs/benchmarks/series/d3f8e434306afbcf48b82b4a6bc04860.json converged docs/benchmarks/series/d4317597797136c2d1547794141d8cff.json converged docs/benchmarks/series/d89b87f08bfc4f00ea9d7ac47b6fdfca.json converged docs/benchmarks/series/d8bb946b35d22e718d8dc568a8985257.json converged docs/benchmarks/series/da1d5de4e4a31e665ea1c32e12ef3dcd.json converged docs/benchmarks/series/dab1a40bfe89924b00dd9351f92d3690.json converged docs/benchmarks/series/daea73f021edf6789cded5975619e60e.json converged docs/benchmarks/series/db568618a99475db7fdf4b807094d052.json converged docs/benchmarks/series/dba8579287743bf36d6a22c944b63615.json converged docs/benchmarks/series/dbf01e6def8ca0401324f3ae9f639d3d.json converged docs/benchmarks/series/dc346b361770996dfa97cccff98f222b.json converged docs/benchmarks/series/dcda94167b6b854464d2376d5e901e2e.json converged docs/benchmarks/series/dd1353ff67c1b35b75db46914d675ad7.json converged docs/benchmarks/series/defee3b8c0e68c22bb56b471d83f6612.json converged docs/benchmarks/series/df37ba7bc50177eff43217132ce5ff51.json converged docs/benchmarks/series/e1882f6e306841ed1354d6e85c461790.json converged docs/benchmarks/series/e1fce2c3ab6c67d4f350060d5529b84b.json converged docs/benchmarks/series/e2667c08c6b6cf8a2aadd970676a2c36.json converged docs/benchmarks/series/e2d1b31b65301fb65b2571785e342129.json converged docs/benchmarks/series/e368a411768cf1e607d9fa874492d895.json converged docs/benchmarks/series/e41f8f22f5030220a3d1d8198ab884c9.json converged docs/benchmarks/series/e52416698095aa9d17ce548a39eff053.json converged docs/benchmarks/series/e68506f2016674c600e7b57ddac915ce.json converged docs/benchmarks/series/e7dbf240031fa3ae5884770e4d0f8a32.json converged docs/benchmarks/series/e8ae3fc1f1fbeaf2b18292caf41e791c.json converged docs/benchmarks/series/ea0cf44f25d0d11ebc9b1b17378ec8a0.json converged docs/benchmarks/series/eb1f872bdc14d46ff6ecdceb4e6d7ba1.json converged docs/benchmarks/series/eb25bdbc91a5aac286aa4059b51d8c61.json converged docs/benchmarks/series/eb3e77914c3b04748d7caf29aebc0176.json converged docs/benchmarks/series/ec6ee2528c07a7435ec220fa93be7c84.json converged docs/benchmarks/series/ecc054b55b42a6844482eeab182823cd.json converged docs/benchmarks/series/efa8dbe44c84e15efe93607f982777c6.json converged docs/benchmarks/series/f05f344405835841c5cfbedefc34c0f7.json converged docs/benchmarks/series/f0b5a1746058da1ecfc8344ccfba4bcc.json converged docs/benchmarks/series/f12a6561a72c8c28b4da437e1f9c7398.json converged docs/benchmarks/series/f1832117ac15046e07ed4b70dea7fc26.json converged docs/benchmarks/series/f27c6f313764d079e7d5bfd2be22bd91.json converged docs/benchmarks/series/f3bbea589328d671d46367c47df8af81.json converged docs/benchmarks/series/f46a87f01fa3bc1eed2cd1ace3d14a6a.json converged docs/benchmarks/series/f778484958b0d985949a873c06971886.json converged docs/benchmarks/series/f859444b43b897c2fb56b7e086ed06fa.json converged docs/benchmarks/series/f89727757e2465113c27fcc619643bb7.json converged docs/benchmarks/series/f8dc012ec6baf483cf31cac7bfb3c738.json converged docs/benchmarks/series/fa0fb1042627c07a9712a377223c9bc0.json converged docs/benchmarks/series/fa437398e27c69aabd763b6dffb30f0b.json converged docs/benchmarks/series/fc5558b1e2122e6289676e2f5d0123bd.json converged docs/benchmarks/series/fe1abad66671821e22d9aef8ff6cec7b.json converged docs/benchmarks/series/fe231a0c0a9a08e89ee1c7ccd94aa0db.json converged docs/benchmarks/series/fe36474a59b2a07f8520100ea744a3cf.json converged docs/benchmarks/series/fed72d440c538cee478f94eadd3510e9.json converged docs/benchmarks/series.jsonl relayed (sealed — you lack the key) docs/dogfood/drive-log.md relayed (sealed — you lack the key) docs/evidence/amend-divergence.md relayed (sealed — you lack the key) docs/evidence/concurrent-agents.md converged docs/evidence/forge-datastores.md relayed (sealed — you lack the key) docs/evidence/lane-hold.md relayed (sealed — you lack the key) docs/evidence/loot-first.md relayed (sealed — you lack the key) docs/evidence/loot-hosts-loot.md relayed (sealed — you lack the key) docs/evidence/perf-gate.md relayed (sealed — you lack the key) docs/evidence/runs/amend-divergence-demo.txt relayed (sealed — you lack the key) docs/evidence/runs/attack-demo.txt relayed (sealed — you lack the key) docs/evidence/runs/concurrent-agents-demo.txt converged docs/evidence/runs/grant-maroon-demo.txt relayed (sealed — you lack the key) docs/evidence/runs/install-prototype-windows.txt converged docs/evidence/runs/lane-hold-demo.txt relayed (sealed — you lack the key) docs/evidence/runs/sealed-path-demo.txt relayed (sealed — you lack the key) docs/evidence/runs/trust-story-demo.txt converged docs/evidence/runs/wave-proof-lanes-demo.txt converged docs/evidence/scripts/amend-divergence-demo.ps1 relayed (sealed — you lack the key) docs/evidence/scripts/attack-demo.ps1 relayed (sealed — you lack the key) docs/evidence/scripts/concurrent-agents-demo.ps1 converged docs/evidence/scripts/grant-maroon-demo.ps1 relayed (sealed — you lack the key) docs/evidence/scripts/lane-hold-demo.ps1 relayed (sealed — you lack the key) docs/evidence/scripts/sealed-path-demo.ps1 relayed (sealed — you lack the key) docs/evidence/scripts/trust-story-demo.ps1 converged docs/evidence/scripts/wave-proof-lanes-demo.ps1 converged docs/evidence/wave-proof-lanes.md converged docs/lore-comparison.md relayed (sealed — you lack the key) docs/pitch/zk-host.md relayed (sealed — you lack the key) docs/release-day-install-checklist.md converged docs/research/deploy-chain-loot-site.md converged docs/research/forge-blob-tier.md converged docs/research/forge-off-the-vps.md relayed (sealed — you lack the key) docs/research/hero-repitch-prototype.md relayed (sealed — you lack the key) docs/research/install-prototype-loot.md converged docs/research/jj-ergonomics-prototype.md relayed (sealed — you lack the key) docs/research/jj-ergonomics.md converged docs/research/loot-first-workflow-prototype.md relayed (sealed — you lack the key) docs/research/presentational-boundary-audit-millerbyte-frontend.md converged docs/research/release-engineering-install-one-liner.md converged docs/research/shared-store-nwriter-audit.md converged docs/research/ts-sdk-path-scoped-fetching.md converged docs/research/ts-sdk-rust-bridging.md converged docs/research/windows-installer-integrity.md converged docs/second-machine-setup.md relayed (sealed — you lack the key) docs/specs/loot-adopt-target.md relayed (sealed — you lack the key) docs/specs/loot-forge.md relayed (sealed — you lack the key) docs/specs/loot-site.md relayed (sealed — you lack the key) docs/specs/loot-tickets.md converged docs/sql/forge-schema.sql relayed (sealed — you lack the key) issues/CA1-docks.md relayed (sealed — you lack the key) issues/CA2-dock-merge-harbor.md relayed (sealed — you lack the key) issues/CA3-porcelain-machine-output.md relayed (sealed — you lack the key) issues/CA4-buoy-resolver.md relayed (sealed — you lack the key) issues/GB1-git-interop-bridge.md relayed (sealed — you lack the key) issues/README.md relayed (sealed — you lack the key) issues/S1-format-versioning.md relayed (sealed — you lack the key) issues/S2-compress-public-content.md relayed (sealed — you lack the key) issues/S3-signed-changes.md relayed (sealed — you lack the key) issues/S4-attestation-lane.md relayed (sealed — you lack the key) issues/S5-wants-negotiation.md relayed (sealed — you lack the key) issues/S6-resumable-transfer.md relayed (sealed — you lack the key) issues/S7-pluggable-relay-backend-s3.md relayed (sealed — you lack the key) issues/S8-sparse-views.md relayed (sealed — you lack the key) issues/S9-relay-fault-injection-tests.md relayed (sealed — you lack the key) issues/create-agent-issues.sh relayed (sealed — you lack the key) issues/create-issues.sh relayed (sealed — you lack the key) rust-toolchain.toml relayed (sealed — you lack the key) sdk/.gitignore converged sdk/README.md relayed (sealed — you lack the key) sdk/package-lock.json relayed (sealed — you lack the key) sdk/package.json relayed (sealed — you lack the key) sdk/scripts/wasm-stamp.mjs converged sdk/src/errors.ts relayed (sealed — you lack the key) sdk/src/grants.ts converged sdk/src/hex.ts converged sdk/src/index.ts relayed (sealed — you lack the key) sdk/src/loot-runner.ts converged sdk/src/physical.ts relayed (sealed — you lack the key) sdk/src/relay-transport.ts converged sdk/src/repo.ts relayed (sealed — you lack the key) sdk/src/working-overlay.ts relayed (sealed — you lack the key) sdk/test/fixtures/gen-relay-fixtures.mjs relayed (sealed — you lack the key) sdk/test/fixtures/relay-bundles.json converged sdk/test/grants.unit.test.ts converged sdk/test/physical.behavior.test.ts relayed (sealed — you lack the key) sdk/test/physical.unit.test.ts relayed (sealed — you lack the key) sdk/test/private.behavior.test.ts relayed (sealed — you lack the key) sdk/test/pull.behavior.test.ts converged sdk/test/push-errors.behavior.test.ts converged sdk/test/read-contract.ts converged sdk/test/read.behavior.test.ts relayed (sealed — you lack the key) sdk/test/relay.unit.test.ts relayed (sealed — you lack the key) sdk/test/working-overlay.test.ts converged sdk/test/write.behavior.test.ts relayed (sealed — you lack the key) sdk/tsconfig.json converged site/.gitignore relayed (sealed — you lack the key) site/Dockerfile converged site/budget.json relayed (sealed — you lack the key) site/package-lock.json relayed (sealed — you lack the key) site/package.json relayed (sealed — you lack the key) site/src/components/blob-highlight.tsx converged site/src/components/code-block-prism.ts converged site/src/components/code-block.tsx converged site/src/components/forge.tsx relayed (sealed — you lack the key) site/src/components/hero.tsx relayed (sealed — you lack the key) site/src/components/private.tsx relayed (sealed — you lack the key) site/src/lib/forge.ts relayed (sealed — you lack the key) site/src/lib/hero.ts converged site/src/lib/identity/bytes.ts converged site/src/lib/identity/key.ts converged site/src/lib/identity/mnemonic.ts converged site/src/lib/identity/recoveryFile.ts converged site/src/lib/identity/seedblob.ts converged site/src/lib/install.ts relayed (sealed — you lack the key) site/src/lib/installerProxy.ts relayed (sealed — you lack the key) site/src/lib/private/api.ts converged site/src/lib/private/csp.ts converged site/src/lib/private/diff.ts converged site/src/lib/private/engine.ts converged site/src/lib/private/grants.ts converged site/src/lib/private/open.ts relayed (sealed — you lack the key) site/src/lib/private/session.ts converged site/src/lib/private/vault.ts converged site/src/react-syntax-highlighter.d.ts relayed (sealed — you lack the key) site/src/routeTree.gen.ts relayed (sealed — you lack the key) site/src/router.tsx relayed (sealed — you lack the key) site/src/routes/__root.tsx relayed (sealed — you lack the key) site/src/routes/account.tsx relayed (sealed — you lack the key) site/src/routes/api.identity.me.ts converged site/src/routes/api.identity.register.ts converged site/src/routes/api.identity.seed.ts converged site/src/routes/api.private.blob.ts converged site/src/routes/api.private.history.ts converged site/src/routes/api.private.me.ts converged site/src/routes/api.private.path-history.ts converged site/src/routes/api.private.presign.ts converged site/src/routes/api.private.repos.ts converged site/src/routes/api.private.tree.ts converged site/src/routes/docs.tsx relayed (sealed — you lack the key) site/src/routes/evidence.tsx relayed (sealed — you lack the key) site/src/routes/index.tsx relayed (sealed — you lack the key) site/src/routes/install.tsx relayed (sealed — you lack the key) site/src/routes/install[.]ps1.ts relayed (sealed — you lack the key) site/src/routes/install[.]sh.ts relayed (sealed — you lack the key) site/src/routes/k.$owner.$repo.blob.$selector.$.tsx relayed (sealed — you lack the key) site/src/routes/k.$owner.$repo.diff.$from.$to.$.tsx relayed (sealed — you lack the key) site/src/routes/k.$owner.$repo.history.$.tsx converged site/src/routes/k.$owner.$repo.history.index.tsx relayed (sealed — you lack the key) site/src/routes/k.$owner.$repo.index.tsx relayed (sealed — you lack the key) site/src/routes/k.$owner.$repo.tree.$selector.$.tsx converged site/src/routes/k.$owner.index.tsx converged site/src/routes/k.$owner.sitemap[.]xml.ts converged site/src/routes/k.$owner.tsx converged site/src/routes/known-issues.tsx relayed (sealed — you lack the key) site/src/routes/license.tsx converged site/src/routes/private.$owner.$repo.blob.$selector.$.tsx relayed (sealed — you lack the key) site/src/routes/private.$owner.$repo.diff.$from.$to.$.tsx converged site/src/routes/private.$owner.$repo.history.$.tsx relayed (sealed — you lack the key) site/src/routes/private.$owner.$repo.history.index.tsx converged site/src/routes/private.$owner.$repo.tree.$selector.$.tsx converged site/src/routes/private.index.tsx converged site/src/routes/robots[.]txt.ts converged site/src/routes/trust.tsx relayed (sealed — you lack the key) site/src/routes/why.tsx relayed (sealed — you lack the key) site/src/server/credentials.ts converged site/src/server/forge.ts relayed (sealed — you lack the key) site/src/server/identity/clerk.ts relayed (sealed — you lack the key) site/src/server/identity/db.ts relayed (sealed — you lack the key) site/src/server/identity/http.ts converged site/src/server/identity/identity.ts converged site/src/server/owner/blobs.ts converged site/src/server/owner/db.ts converged site/src/server/owner/http.ts converged site/src/server/owner/owner.ts converged site/src/server/read/blob.ts relayed (sealed — you lack the key) site/src/server/read/db.ts relayed (sealed — you lack the key) site/src/server/read/index.ts converged site/src/server/read/read.ts relayed (sealed — you lack the key) site/src/server/read/seal.ts converged site/src/server/read/sigv4.ts relayed (sealed — you lack the key) site/src/server/read/tree.ts converged site/src/server/read/types.ts relayed (sealed — you lack the key) site/src/styles.css relayed (sealed — you lack the key) site/src/vite-env.d.ts relayed (sealed — you lack the key) site/test/alias.pg.test.ts converged site/test/anonymous-links.test.ts converged site/test/code-block.test.ts converged site/test/credentials.test.ts converged site/test/forge.test.ts relayed (sealed — you lack the key) site/test/helpers.ts converged site/test/hero.test.ts converged site/test/identity.pg.test.ts converged site/test/identity.unit.test.ts relayed (sealed — you lack the key) site/test/installerProxy.test.ts converged site/test/owner.pg.test.ts converged site/test/private-csp.test.ts converged site/test/private-diff.test.ts converged site/test/private-engine.test.ts converged site/test/private-grants.test.ts converged site/test/private-open.test.ts converged site/test/private-presign.test.ts converged site/test/read.pg.test.ts relayed (sealed — you lack the key) site/test/release-pin.net.test.ts relayed (sealed — you lack the key) site/test/seal.test.ts converged site/test/sigv4.test.ts converged site/tools/budget.mjs relayed (sealed — you lack the key) site/tsconfig.app.json relayed (sealed — you lack the key) site/tsconfig.json relayed (sealed — you lack the key) site/tsconfig.node.json relayed (sealed — you lack the key) site/vercel.json relayed (sealed — you lack the key) site/vite.config.ts relayed (sealed — you lack the key) site/vitest.config.ts converged tools/claude-worktree-guard.sh converged tools/loot-day.ps1 relayed (sealed — you lack the key) tools/loot-first.ps1 converged tools/new-agent.ps1 relayed (sealed — you lack the key) converged onto one line: .claude/settings.json internal .claude/skills/afk-loop/SKILL.md internal .claude/skills/burn-secret/SKILL.md internal .claude/skills/diagnose-bounce/SKILL.md internal .claude/skills/diagnose-divergent/SKILL.md internal .claude/skills/diagnose-push-rejected/SKILL.md internal .claude/skills/diagnose-visibility/SKILL.md internal .claude/skills/grant-path/SKILL.md internal .claude/skills/land-change/SKILL.md internal .claude/skills/loot-runbooks/BINARIES.md internal .claude/skills/loot-runbooks/SKILL.md internal .claude/skills/maroon-identity/SKILL.md internal .claude/skills/mint-agent-identity/SKILL.md internal .claude/skills/op-restore/SKILL.md internal .claude/skills/review-quarantine/SKILL.md internal .claude/skills/rotate-key/SKILL.md internal .claude/skills/set-embargo/SKILL.md internal .claude/skills/ticket-to-lane/SKILL.md internal .gitattributes internal .github/workflows/site-main.yml internal .github/workflows/test-main.yml internal .gitignore internal .lootattributes internal .lootignore internal .vercelignore internal AGENTS.md internal CONTEXT.md internal Cargo.lock internal Cargo.toml internal LICENSE-APACHE published LICENSE-MIT published README.md published crates/loot-bench/Cargo.toml internal crates/loot-bench/src/lib.rs internal crates/loot-cli/Cargo.toml internal crates/loot-cli/src/bisect.rs internal crates/loot-cli/src/blame.rs internal crates/loot-cli/src/disclosure.rs internal crates/loot-cli/src/doctor.rs internal crates/loot-cli/src/draft.rs internal crates/loot-cli/src/dup.rs internal crates/loot-cli/src/emit.rs internal crates/loot-cli/src/error.rs internal crates/loot-cli/src/evolog.rs internal crates/loot-cli/src/ferry.rs internal crates/loot-cli/src/flags.rs internal crates/loot-cli/src/git_mirror.rs internal crates/loot-cli/src/grep.rs internal crates/loot-cli/src/history.rs internal crates/loot-cli/src/hunks.rs internal crates/loot-cli/src/kv.rs internal crates/loot-cli/src/ledger.rs internal crates/loot-cli/src/lib.rs internal crates/loot-cli/src/main.rs internal crates/loot-cli/src/mergetool.rs internal crates/loot-cli/src/pick.rs internal crates/loot-cli/src/policy.rs internal crates/loot-cli/src/position.rs internal crates/loot-cli/src/reconcile.rs internal crates/loot-cli/src/render.rs internal crates/loot-cli/src/tar.rs internal crates/loot-cli/src/textdiff.rs internal crates/loot-cli/src/tutorial.rs internal crates/loot-cli/src/unlock.rs internal crates/loot-cli/src/verbs/attest.rs internal crates/loot-cli/src/verbs/change.rs internal crates/loot-cli/src/verbs/conflicts.rs internal crates/loot-cli/src/verbs/custody.rs internal crates/loot-cli/src/verbs/grants.rs internal crates/loot-cli/src/verbs/history.rs internal crates/loot-cli/src/verbs/identity.rs internal crates/loot-cli/src/verbs/lane.rs internal crates/loot-cli/src/verbs/mod.rs internal crates/loot-cli/src/verbs/oplog.rs internal crates/loot-cli/src/verbs/relay.rs internal crates/loot-cli/src/verbs/repo.rs internal crates/loot-cli/src/verbs/store.rs internal crates/loot-cli/src/verbs/sync.rs internal crates/loot-cli/src/verbs/view.rs internal crates/loot-cli/src/view.rs internal crates/loot-cli/src/workspace/lanes.rs internal crates/loot-cli/src/workspace/reconcile.rs internal crates/loot-cli/src/workspace/refit.rs internal crates/loot-cli/src/workspace/reports.rs internal crates/loot-cli/src/workspace/take.rs internal crates/loot-cli/src/workspace.rs internal crates/loot-cli/tests/broken_pipe.rs internal crates/loot-cli/tests/cli_smoke.rs internal crates/loot-cli/tests/custody_lock.rs internal crates/loot-cli/tests/describe_contention.rs internal crates/loot-cli/tests/docs_demo.rs internal crates/loot-cli/tests/emit_snapshot.rs internal crates/loot-cli/tests/forge_push.rs internal crates/loot-cli/tests/skill_commands.rs internal crates/loot-cli/tests/sparse_view.rs internal crates/loot-cli/tests/sync_resume.rs internal crates/loot-cli/tests/tutorial.rs internal crates/loot-cli/tests/workspace_publish_guard.rs internal crates/loot-codec/Cargo.toml internal crates/loot-codec/src/attestation.rs internal crates/loot-codec/src/bundle_codec.rs internal crates/loot-codec/src/change_id.rs internal crates/loot-codec/src/envelope.rs internal crates/loot-codec/src/format.rs internal crates/loot-codec/src/hex.rs internal crates/loot-codec/src/key_seal.rs internal crates/loot-codec/src/lib.rs internal crates/loot-codec/src/purge.rs internal crates/loot-codec/src/sealed.rs internal crates/loot-codec/src/treepath.rs internal crates/loot-core/Cargo.toml internal crates/loot-core/examples/patched-client.rs internal crates/loot-core/src/bridge.rs internal crates/loot-core/src/buoy.rs internal crates/loot-core/src/burn.rs internal crates/loot-core/src/converge.rs internal crates/loot-core/src/deposits.rs internal crates/loot-core/src/engine/change_graph.rs internal crates/loot-core/src/engine/custody.rs internal crates/loot-core/src/engine/graph_view.rs internal crates/loot-core/src/engine/merge.rs internal crates/loot-core/src/engine/negotiation.rs internal crates/loot-core/src/engine/object_store.rs internal crates/loot-core/src/engine/persist_codec.rs internal crates/loot-core/src/engine/surface.rs internal crates/loot-core/src/engine.rs internal crates/loot-core/src/escrow.rs internal crates/loot-core/src/lib.rs internal crates/loot-core/src/liveness.rs internal crates/loot-core/src/manifest.rs internal crates/loot-core/src/oplog.rs internal crates/loot-core/src/store.rs internal crates/loot-core/src/testkit.rs internal crates/loot-core/src/verdict.rs internal crates/loot-core/tests/merge_corpus.rs internal crates/loot-first/Cargo.toml internal crates/loot-first/src/forge.rs internal crates/loot-first/src/harbor.rs internal crates/loot-first/src/hygiene.rs internal crates/loot-first/src/lib.rs internal crates/loot-first/src/main.rs internal crates/loot-first/src/orchestrator.rs internal crates/loot-first/src/policy.rs internal crates/loot-first/tests/doc_links.rs internal crates/loot-first/tests/exit_codes.rs internal crates/loot-first/tests/line_endings.rs internal crates/loot-first/tests/runbook_portability.rs internal crates/loot-forge/Cargo.toml internal crates/loot-forge/Dockerfile internal crates/loot-forge/migrations/0002_grant_inbox.sql internal crates/loot-forge/migrations/0003_read_views.sql internal crates/loot-forge/migrations/0004_change_authored_at.sql internal crates/loot-forge/migrations/0005_published_index.sql internal crates/loot-forge/migrations/0006_version_stack.sql internal crates/loot-forge/migrations/0007_identity_writer.sql internal crates/loot-forge/migrations/0008_retired_key_alias.sql internal crates/loot-forge/migrations/0009_owner_read.sql internal crates/loot-forge/migrations/0010_tree_entry_by_object_manifest.sql internal crates/loot-forge/src/blob.rs internal crates/loot-forge/src/conformance.rs internal crates/loot-forge/src/error.rs internal crates/loot-forge/src/grant.rs internal crates/loot-forge/src/inbox.rs internal crates/loot-forge/src/ingest.rs internal crates/loot-forge/src/lib.rs internal crates/loot-forge/src/main.rs internal crates/loot-forge/src/memory.rs internal crates/loot-forge/src/model.rs internal crates/loot-forge/src/pg/inbox.rs internal crates/loot-forge/src/pg/meta.rs internal crates/loot-forge/src/pg/migrate.rs internal crates/loot-forge/src/pg/mod.rs internal crates/loot-forge/src/pg/pool.rs internal crates/loot-forge/src/pg/tests.rs internal crates/loot-forge/src/pg/tls.rs internal crates/loot-forge/src/publish.rs internal crates/loot-forge/src/purge.rs internal crates/loot-forge/src/s3.rs internal crates/loot-forge/src/serve.rs internal crates/loot-forge/src/server.rs internal crates/loot-forge/src/store.rs internal crates/loot-forge/src/sweep.rs internal crates/loot-forge/tests/account_tier.rs internal crates/loot-forge/tests/http.rs internal crates/loot-forge/tests/ingest_and_serve.rs internal crates/loot-identity/Cargo.toml internal crates/loot-identity/src/bip39-english.txt internal crates/loot-identity/src/key_seal.rs internal crates/loot-identity/src/lib.rs internal crates/loot-identity/src/mnemonic.rs internal crates/loot-identity/src/peers.rs internal crates/loot-identity/src/seed_seal.rs internal crates/loot-net/Cargo.toml internal crates/loot-net/src/args.rs internal crates/loot-net/src/auth.rs internal crates/loot-net/src/forge.rs internal crates/loot-net/src/lib.rs internal crates/loot-net/src/mailbox.rs internal crates/loot-net/src/relay_store.rs internal crates/loot-net/src/storage.rs internal crates/loot-net/tests/fault_injection.rs internal crates/loot-net/tests/relay_maintenance.rs internal crates/loot-net/tests/sync_round_trip.rs internal crates/loot-perf/Cargo.toml internal crates/loot-perf/examples/offer_corpus.rs internal crates/loot-perf/src/bin/loot-perf-cli.rs internal crates/loot-perf/src/bin/loot-perf-gate.rs internal crates/loot-perf/src/cli.rs internal crates/loot-perf/src/fixture.rs internal crates/loot-perf/src/gate.rs internal crates/loot-perf/src/lib.rs internal crates/loot-perf/src/load.rs internal crates/loot-perf/src/measure.rs internal crates/loot-perf/src/pinned.rs internal crates/loot-perf/src/record.rs internal crates/loot-relay-contract/Cargo.toml internal crates/loot-relay-contract/src/lib.rs internal crates/loot-relay-contract/tests/fs_backend.rs internal crates/loot-relay-contract/tests/the_suite_asks_every_rule.rs internal crates/loot-relayd/Cargo.toml internal crates/loot-relayd/src/lib.rs internal crates/loot-relayd/src/main.rs internal crates/loot-relayd/tests/object_store_relay.rs internal crates/loot-revset/Cargo.toml internal crates/loot-revset/src/error.rs internal crates/loot-revset/src/eval.rs internal crates/loot-revset/src/lexer.rs internal crates/loot-revset/src/lib.rs internal crates/loot-revset/src/parser.rs internal crates/loot-revset/tests/revset.rs internal crates/loot-s3/Cargo.toml internal crates/loot-s3/src/lib.rs internal crates/loot-wasm/Cargo.toml internal crates/loot-wasm/src/lib.rs internal crates/loot-wasm/tests/parity.rs internal crates/spike-crdt/Cargo.toml internal crates/spike-crdt/src/lib.rs internal crates/spike-dag/Cargo.toml internal crates/spike-dag/src/lib.rs internal dist-workspace.toml internal docs/adr/0001-per-content-decrypt-then-merge-convergence.md internal docs/adr/0002-encrypted-dag-foundation.md internal docs/adr/0003-sealed-content-module-keyring-custody.md internal docs/adr/0004-drop-plaintext-dedup-equality-oracle.md internal docs/adr/0005-cli-slice-persistence-and-attributes.md internal docs/adr/0006-workspace-auto-snapshot.md internal docs/adr/0007-embargo-escrow-module.md internal docs/adr/0008-grant-log-and-targeted-key-bundles.md internal docs/adr/0009-two-level-revocation.md internal docs/adr/0010-forward-maroon-implementation.md internal docs/adr/0011-relay-stow-append-only.md internal docs/adr/0012-per-object-loose-storage.md internal docs/adr/0013-named-remotes-and-grant-bundle-delivery.md internal docs/adr/0014-identity-keypairs-openssh-ed25519.md internal docs/adr/0015-grant-authentication-and-trust.md internal docs/adr/0016-identity-portability-and-rotation.md internal docs/adr/0017-repostore-loot-layout.md internal docs/adr/0018-signed-changes-authored-history.md internal docs/adr/0019-format-versioning-and-compatibility.md internal docs/adr/0020-compress-public-content.md internal docs/adr/0021-object-level-wants-negotiation.md internal docs/adr/0022-concurrent-agent-model-docks.md internal docs/adr/0023-agent-facing-machine-output.md internal docs/adr/0024-resumable-transfer.md internal docs/adr/0025-buoy-resolver.md internal docs/adr/0026-agent-identity-model.md internal docs/adr/0027-hard-embargo-timed-sealed-grants.md internal docs/adr/0028-git-interop-bridge.md internal docs/adr/0029-stable-change-ids.md internal docs/adr/0030-implicit-auto-snapshot-and-verb-surface.md internal docs/adr/0031-operation-log-and-undo.md internal docs/adr/0032-amend-supersession-and-loot-edit.md internal docs/adr/0033-projecting-amended-changes-to-git.md internal docs/adr/0034-sealed-lanes-over-a-shared-store.md internal docs/adr/0035-lane-lifecycle.md internal docs/adr/0036-harbor-serialized-integrator.md internal docs/adr/0037-loot-product-site-and-install.md internal docs/adr/0038-burn-and-the-mis-seal-gate.md internal docs/adr/0039-review-is-a-pure-projection.md internal docs/adr/0040-loot-codec-and-the-wasm-core.md internal docs/adr/0041-public-multi-tenant-loot-forge.md internal docs/adr/0042-sealable-tickets-in-the-repos-own-tree.md internal docs/adr/0043-authored-timestamps-as-a-signed-label.md internal docs/adr/0044-three-way-content-merge-at-the-converge-seam.md internal docs/adr/0045-github-stays-private-and-the-download-path-moves-to-r2.md internal docs/adr/0046-forge-backups-are-operator-recovery-and-a-restore-replays-the-revocation-journal.md internal docs/adr/0047-the-lanes-hold-position-scoped-custody.md internal docs/adr/0048-a-relay-is-measured-not-capped.md internal docs/adr/0049-deploy-releases-build-and-publish-off-github.md internal docs/adr/0050-a-land-runs-from-a-lane.md internal docs/adr/0051-tree-paths-are-stored-with-one-separator.md internal docs/adr/0052-a-relay-retires-a-head-never-content.md internal docs/adr/0053-the-bridge-learns-landed-main-from-the-checkout.md internal docs/adr/0054-an-empty-holder-list-is-unknown-not-nobody.md internal docs/adr/0055-a-land-gates-the-tree-it-publishes.md internal docs/adr/0056-a-store-knows-which-machine-materialized-it.md internal docs/adr/0057-a-push-deposits-this-identitys-own-keys.md internal docs/adr/0058-uncaptured-primary-work-leaves-by-explicit-take.md internal docs/adr/0059-credentials-arrive-by-file-the-environment-stays-the-dev-path.md internal docs/adr/0060-the-public-bucket-carries-binaries-not-source.md internal docs/adr/0061-the-forges-door-is-a-custody-list-not-a-capacity-gate.md internal docs/adr/0062-an-afk-run-approves-its-own-review-prs.md internal docs/adr/0063-lane-merge-is-retired-a-land-is-the-only-fold.md internal docs/adr/0064-loot-is-not-on-crates-io-and-its-names-are-held-anyway.md internal docs/adr/0065-a-hygiene-check-runs-at-the-moment-that-makes-it-true.md internal docs/adr/0066-the-alpha-promises-the-repo-not-the-interface.md internal docs/adr/0067-the-install-smoke-gates-staged-bytes-and-detects-published-ones.md internal docs/adr/0068-custody-at-rest-is-sealed-to-your-own-key-behind-an-optional-passphrase.md internal docs/adr/0069-internal-stays-the-default-tier.md internal docs/adr/0070-an-object-store-relay-is-a-second-deployable-the-cli-ships-no-driver.md internal docs/adr/0071-the-site-gate-is-a-build-and-a-per-surface-byte-ceiling.md internal docs/agents/concurrent.md internal docs/agents/identity.md internal docs/agents/issue-tracker.md internal docs/agents/workflow.md internal docs/bakeoff/index.html internal docs/benchmarks/level-c-proof.md internal docs/benchmarks/series/028826355afe53046bef50b0c1c8c9e4.json internal docs/benchmarks/series/046f7b9ecdc1d70f5f5c877e834dc22e.json internal docs/benchmarks/series/05cd774bda937b9132f78e2e4caec6a9.json internal docs/benchmarks/series/05deb2339e2b0d22f7349c25adda3f9a.json internal docs/benchmarks/series/061a50b881bf7575de05894d1fd84a17.json internal docs/benchmarks/series/063031023c690cc4b4ac36627e3a6252.json internal docs/benchmarks/series/0630f74d5a8214f6272dcf748625922c.json internal docs/benchmarks/series/09e4e9b77df1e8fc4f53350faa7dc0a0.json internal docs/benchmarks/series/0a0a999ee7cb7125a5dba08780cf0154.json internal docs/benchmarks/series/0a0d3e37f6c1906f062baf76e5d0bdb5.json internal docs/benchmarks/series/0a4afa36500e4f2c4e4cf1e67a146dee.json internal docs/benchmarks/series/0c69c26d6bf8ece417d0e5f2893bde34.json internal docs/benchmarks/series/0d9f140dab75dc65ccba8afd7b5c65b0.json internal docs/benchmarks/series/0e5b19b49b7a9e8abcb0b3683713a761.json internal docs/benchmarks/series/0ed6408ad9ee09599e1d6e28db8b3d73.json internal docs/benchmarks/series/11e40e4d65e7a51c05ae9cf74540a331.json internal docs/benchmarks/series/12b4a2b80cf38f203528ab2f8fcb7a4e.json internal docs/benchmarks/series/12f76e1bc780456f166dc520a1d8c5d8.json internal docs/benchmarks/series/13d67aca15d5627aa1c58e3cac7c189b.json internal docs/benchmarks/series/150fdfd2c40e075d2f6e05eeb2e9efaf.json internal docs/benchmarks/series/15eb5a6a286cd317f6bcfd96244b5052.json internal docs/benchmarks/series/15fc913af64af9ee5ee36697324ac209.json internal docs/benchmarks/series/16f779bd952e8e300b326cab50a04644.json internal docs/benchmarks/series/187ab50109449e31cdbccb676b367120.json internal docs/benchmarks/series/19e8f429081483bb09da68b414832dbc.json internal docs/benchmarks/series/1bf06c2fc99d2ce59c81ead4ce6c3cdd.json internal docs/benchmarks/series/1c7e75bc30f53ac952a7b84da2267fbe.json internal docs/benchmarks/series/1caf8f0479e90be97ca47ee8807c1e9a.json internal docs/benchmarks/series/1f4f5ebff436d27c3e5e879b04888389.json internal docs/benchmarks/series/20cc3e7e913e0e3fb7200009a5ca6044.json internal docs/benchmarks/series/2238a37b610a70c0c4a959358dab514e.json internal docs/benchmarks/series/226201ea4b7e69ead709d37776748a4c.json internal docs/benchmarks/series/237975a79b6fe5c1de263d6191cb0b7e.json internal docs/benchmarks/series/239cff6bba46860f6ecab32915d823fc.json internal docs/benchmarks/series/23bde6c42588a5176badbf91d029dea1.json internal docs/benchmarks/series/28c010bff9a1ff8a3c27d63c7112d9b6.json internal docs/benchmarks/series/28ec5090aada67162f07d4c8d3e549c1.json internal docs/benchmarks/series/29105c284535b16a4434a441d5a45c19.json internal docs/benchmarks/series/2a13476b871c9aa3415c775f9f3df9ad.json internal docs/benchmarks/series/2d3f02ceae3c90282d236e2da70b5f23.json internal docs/benchmarks/series/2e7113f6990841f96592b68d94ab9b14.json internal docs/benchmarks/series/2e9092b38de3d5f317f17fe95ca9a769.json internal docs/benchmarks/series/2f6afeafbafe22ebdf59d30d8dd34b42.json internal docs/benchmarks/series/308669e881929362f54f576b341d0ff5.json internal docs/benchmarks/series/30b86fe93b6b0c047b0194ea5c5aad6b.json internal docs/benchmarks/series/314a197ad9d8c644e715da623529f63f.json internal docs/benchmarks/series/31aedc3b86c19b1259a4f7318b6a24ec.json internal docs/benchmarks/series/3232c95d09276a447505291131e1fefd.json internal docs/benchmarks/series/33a0d489d7f2e2942b02a9eee3f56dc8.json internal docs/benchmarks/series/382645c7c19c103e52d810a10cd7f290.json internal docs/benchmarks/series/39b8b1966801a51dbad161133db6260c.json internal docs/benchmarks/series/3d76c7397da07b4c938c3e2077837cd5.json internal docs/benchmarks/series/3fc15007f3258b663654678d50f7ffea.json internal docs/benchmarks/series/4040bc822da0d978c9b98eff6d68a016.json internal docs/benchmarks/series/40c63a46753cfe53a1af155b090ade4d.json internal docs/benchmarks/series/418c29ae5cb594de966a7b6fbb13a1cf.json internal docs/benchmarks/series/42dea0586072d4410de16e45ffa47c69.json internal docs/benchmarks/series/4386d067201c1e75956184e927fceaba.json internal docs/benchmarks/series/445e542c803bb956ecbbbf628b937f72.json internal docs/benchmarks/series/479076dcfde507e7b74f9957bff09599.json internal docs/benchmarks/series/482b98a5eaeca16b63ab554357021a8c.json internal docs/benchmarks/series/48a504f4d3ea51cc423657c7c735087d.json internal docs/benchmarks/series/49f6a68c35c55158ff751420b8a5a99e.json internal docs/benchmarks/series/4a51266a8eacbb818bbc0c22811eeaa5.json internal docs/benchmarks/series/4ae36e3ac8b55a8eddf10f005107f16b.json internal docs/benchmarks/series/4c32c1e407af4755a59464c726f8ab0f.json internal docs/benchmarks/series/4d6d5b819274aea7b833af8fe933751e.json internal docs/benchmarks/series/519290b69a6849f04c7fc5402ecf75ff.json internal docs/benchmarks/series/51afe3e37a8f0543fd4fc95e97e817c4.json internal docs/benchmarks/series/52869b25ee6388b901edd5d9a85c1a60.json internal docs/benchmarks/series/53673e5df58804f4da23ee6515f068da.json internal docs/benchmarks/series/559ca38a99733ce284d2816e57298aa2.json internal docs/benchmarks/series/5a09a5cf0ab34b3d1c46f9a368036eb6.json internal docs/benchmarks/series/5a74641c3a26b2e66eccf0fc81462033.json internal docs/benchmarks/series/5acd6c2d5010d65d71ba378ca84ca87d.json internal docs/benchmarks/series/5c53b6515bdd708cecfa846a714a781e.json internal docs/benchmarks/series/5d71b9982451702788b8a4997f5fb23f.json internal docs/benchmarks/series/5dab0ef3553db2d049fc02de3dfd46e9.json internal docs/benchmarks/series/601f7fae489529fbd78c218163354682.json internal docs/benchmarks/series/6042a9bd5eb0b4b32c1671ffc065de7e.json internal docs/benchmarks/series/616a3b7459d86c2f8dedd2328a686700.json internal docs/benchmarks/series/6203fa4267075e0f83498a598e8c2bd0.json internal docs/benchmarks/series/62f2809ec9af2b2c82376c88debef144.json internal docs/benchmarks/series/666bd9140d485f9c1706d4c5abf0d6c1.json internal docs/benchmarks/series/67c0d70547abbc2640bb69201e1df9ff.json internal docs/benchmarks/series/67cbcf09aee8b66111c9e942c3f44eaf.json internal docs/benchmarks/series/681642ea872702054990ac41b777dd14.json internal docs/benchmarks/series/68bc0ff8c6c4c79125825510de0a14de.json internal docs/benchmarks/series/6b16101bca7fe39afa61713c7086a00c.json internal docs/benchmarks/series/6b4673bc551d8fbe64556789defb31b0.json internal docs/benchmarks/series/6d8c826443187a44739ad4682a232e7a.json internal docs/benchmarks/series/735dd300664098092c8479c9820bfbee.json internal docs/benchmarks/series/73d793f864728346702b4f766ffe6ecb.json internal docs/benchmarks/series/74a4d5cb1abbde542100399ac9e4d609.json internal docs/benchmarks/series/751f1485596090235cb3d869be93906c.json internal docs/benchmarks/series/7730460d7b4ece4c6e11e49e3dd2928a.json internal docs/benchmarks/series/77c04ee442e1861d4091d3cb5ed221b5.json internal docs/benchmarks/series/794a8b73e013ebecd6ad5b21a8bbc328.json internal docs/benchmarks/series/79ac53bbc01d821cd0dbce2874c804af.json internal docs/benchmarks/series/7af080758e50e28ebd39d0a70986a020.json internal docs/benchmarks/series/7d787f08b695a8e086fa4a8e11259f6d.json internal docs/benchmarks/series/7ed47eda57bb5baf88f8c2408d7d6dab.json internal docs/benchmarks/series/7ef26f633466df80cd131cc63082a027.json internal docs/benchmarks/series/80091cd23238c47a2d4827ab54778ed4.json internal docs/benchmarks/series/809b8bb3cf50b4aabbb36a1fbbdcbe7e.json internal docs/benchmarks/series/80e81d847cc2569be709a4e59a98f6af.json internal docs/benchmarks/series/80f3dd0ff1a3a03d7e528235c7e6c586.json internal docs/benchmarks/series/814d1fcfe650d279c8b2184cd0e5548b.json internal docs/benchmarks/series/82982d8206b46ec3d2db6719fa42530a.json internal docs/benchmarks/series/82fbb9eb29afcbad962719ce7a1ac672.json internal docs/benchmarks/series/8409e44d9d8b2415b09b2c0fc437038f.json internal docs/benchmarks/series/841ec5f40b97a0451c0a83d7ee78aa13.json internal docs/benchmarks/series/8611c6f2b378c55d5452ebab1984b8ed.json internal docs/benchmarks/series/8b8decb06438ea7d8a7d0910ed6adfbe.json internal docs/benchmarks/series/8d103ea93de36dfa838bc10a864ce566.json internal docs/benchmarks/series/8dd5567ddc93db6b4a6a0765547e2397.json internal docs/benchmarks/series/8fbc3f3b8c70db3a1ec7fa14beafe7e6.json internal docs/benchmarks/series/9177bc510c951d747829680d02b3b2bc.json internal docs/benchmarks/series/926464bd1aab63ba0566fb59b2585e47.json internal docs/benchmarks/series/9278bcddee4d9c10a93d2b00866bfec7.json internal docs/benchmarks/series/95020bb3489585777a77a4d2692f45af.json internal docs/benchmarks/series/956fce0c46ee56dc537af5ef56d781f6.json internal docs/benchmarks/series/98631b8e2a13b877ef37869f2ce5c7b0.json internal docs/benchmarks/series/986ab45e0492e87b09be5c444154cf27.json internal docs/benchmarks/series/990c5cd54f3d07bdc1450bd9e83eccdb.json internal docs/benchmarks/series/9b4d823518270ec35967a490ffa568ad.json internal docs/benchmarks/series/9d251c9426ed7abecb886ace50d6cb69.json internal docs/benchmarks/series/9e2a53e9f680e272ed2d5532fd97b5fc.json internal docs/benchmarks/series/9e775525f5d207a00a544841a5eed366.json internal docs/benchmarks/series/a0339599164efafb37854728d616ebf7.json internal docs/benchmarks/series/a31a0fb8fc301dd662fa745b1320c70f.json internal docs/benchmarks/series/a389b7abde0979680eef738f15411395.json internal docs/benchmarks/series/a7f1ee0f442da5a8ebf18113e8875bab.json internal docs/benchmarks/series/a8bc4435292e16ad497064f5d633fd68.json internal docs/benchmarks/series/aafc18d6c879b352f4bd242c0a17a44b.json internal docs/benchmarks/series/ab647cde7faa215725418831fdc1dc4d.json internal docs/benchmarks/series/ae0a800e9b0718871941c83d92549040.json internal docs/benchmarks/series/aea7632cae3cf92b34974c670b109c18.json internal docs/benchmarks/series/b13c688922bda6fd11ac756df47af803.json internal docs/benchmarks/series/b23ed6218152821e5151257649d8e6e2.json internal docs/benchmarks/series/b349edf62b082e3b8c05b2331ae51b96.json internal docs/benchmarks/series/b40e3a0f43fa5a15fd510086abe5ae80.json internal docs/benchmarks/series/b4862b264b4ec20a771fc729d82c5a79.json internal docs/benchmarks/series/b5f2c1da4db10382876c7648a5ae1316.json internal docs/benchmarks/series/b733ac785ae9f0c15a924fd9b76b73a0.json internal docs/benchmarks/series/b74b292392962bd6218a7fdcc23445bb.json internal docs/benchmarks/series/b781c7bfe9431361963754880b750969.json internal docs/benchmarks/series/b949ef859c28d21bf445987cd9a53fc1.json internal docs/benchmarks/series/bb58ed9a272f218a4bc58ce744f29f32.json internal docs/benchmarks/series/bc350acbd3108d5e427ba4778f4e3ecd.json internal docs/benchmarks/series/bfe705ec01139b7124f0ee9d39bfc6c8.json internal docs/benchmarks/series/bffd8ad24ab792e12bdaca5171446d2d.json internal docs/benchmarks/series/c022c440a3b2cce037cb20ef334bed4b.json internal docs/benchmarks/series/c1b77fcce90ac884a935f22dd70a1575.json internal docs/benchmarks/series/c23d9e2cf01fd9509ff97f125b2e6eb5.json internal docs/benchmarks/series/c2b58d0b59e24e6ab307a7df7ea2c2ac.json internal docs/benchmarks/series/c5e6e1e0eee3406e68197af87bd662a3.json internal docs/benchmarks/series/c64b8806b48153a3596c4f68a57bd2bc.json internal docs/benchmarks/series/c81470b1216e6b16666399fcf9a5afba.json internal docs/benchmarks/series/c95a07150672624c22988255456bd83a.json internal docs/benchmarks/series/cec6b2e92e2042203ae643d1d664c2ab.json internal docs/benchmarks/series/cf3501296e9dbb153fc55961c5e766e9.json internal docs/benchmarks/series/d1454de7f4c42583ecf43ca7c06bf7b7.json internal docs/benchmarks/series/d3f8e434306afbcf48b82b4a6bc04860.json internal docs/benchmarks/series/d4317597797136c2d1547794141d8cff.json internal docs/benchmarks/series/d89b87f08bfc4f00ea9d7ac47b6fdfca.json internal docs/benchmarks/series/d8bb946b35d22e718d8dc568a8985257.json internal docs/benchmarks/series/da1d5de4e4a31e665ea1c32e12ef3dcd.json internal docs/benchmarks/series/dab1a40bfe89924b00dd9351f92d3690.json internal docs/benchmarks/series/daea73f021edf6789cded5975619e60e.json internal docs/benchmarks/series/db568618a99475db7fdf4b807094d052.json internal docs/benchmarks/series/dba8579287743bf36d6a22c944b63615.json internal docs/benchmarks/series/dbf01e6def8ca0401324f3ae9f639d3d.json internal docs/benchmarks/series/dc346b361770996dfa97cccff98f222b.json internal docs/benchmarks/series/dcda94167b6b854464d2376d5e901e2e.json internal docs/benchmarks/series/dd1353ff67c1b35b75db46914d675ad7.json internal docs/benchmarks/series/defee3b8c0e68c22bb56b471d83f6612.json internal docs/benchmarks/series/df37ba7bc50177eff43217132ce5ff51.json internal docs/benchmarks/series/e1882f6e306841ed1354d6e85c461790.json internal docs/benchmarks/series/e1fce2c3ab6c67d4f350060d5529b84b.json internal docs/benchmarks/series/e2667c08c6b6cf8a2aadd970676a2c36.json internal docs/benchmarks/series/e2d1b31b65301fb65b2571785e342129.json internal docs/benchmarks/series/e368a411768cf1e607d9fa874492d895.json internal docs/benchmarks/series/e41f8f22f5030220a3d1d8198ab884c9.json internal docs/benchmarks/series/e52416698095aa9d17ce548a39eff053.json internal docs/benchmarks/series/e68506f2016674c600e7b57ddac915ce.json internal docs/benchmarks/series/e7dbf240031fa3ae5884770e4d0f8a32.json internal docs/benchmarks/series/e8ae3fc1f1fbeaf2b18292caf41e791c.json internal docs/benchmarks/series/ea0cf44f25d0d11ebc9b1b17378ec8a0.json internal docs/benchmarks/series/eb1f872bdc14d46ff6ecdceb4e6d7ba1.json internal docs/benchmarks/series/eb25bdbc91a5aac286aa4059b51d8c61.json internal docs/benchmarks/series/eb3e77914c3b04748d7caf29aebc0176.json internal docs/benchmarks/series/ec6ee2528c07a7435ec220fa93be7c84.json internal docs/benchmarks/series/ecc054b55b42a6844482eeab182823cd.json internal docs/benchmarks/series/efa8dbe44c84e15efe93607f982777c6.json internal docs/benchmarks/series/f05f344405835841c5cfbedefc34c0f7.json internal docs/benchmarks/series/f0b5a1746058da1ecfc8344ccfba4bcc.json internal docs/benchmarks/series/f12a6561a72c8c28b4da437e1f9c7398.json internal docs/benchmarks/series/f1832117ac15046e07ed4b70dea7fc26.json internal docs/benchmarks/series/f27c6f313764d079e7d5bfd2be22bd91.json internal docs/benchmarks/series/f3bbea589328d671d46367c47df8af81.json internal docs/benchmarks/series/f46a87f01fa3bc1eed2cd1ace3d14a6a.json internal docs/benchmarks/series/f778484958b0d985949a873c06971886.json internal docs/benchmarks/series/f859444b43b897c2fb56b7e086ed06fa.json internal docs/benchmarks/series/f89727757e2465113c27fcc619643bb7.json internal docs/benchmarks/series/f8dc012ec6baf483cf31cac7bfb3c738.json internal docs/benchmarks/series/fa0fb1042627c07a9712a377223c9bc0.json internal docs/benchmarks/series/fa437398e27c69aabd763b6dffb30f0b.json internal docs/benchmarks/series/fc5558b1e2122e6289676e2f5d0123bd.json internal docs/benchmarks/series/fe1abad66671821e22d9aef8ff6cec7b.json internal docs/benchmarks/series/fe231a0c0a9a08e89ee1c7ccd94aa0db.json internal docs/benchmarks/series/fe36474a59b2a07f8520100ea744a3cf.json internal docs/benchmarks/series/fed72d440c538cee478f94eadd3510e9.json internal docs/benchmarks/series.jsonl internal docs/dogfood/drive-log.md internal docs/evidence/amend-divergence.md internal docs/evidence/concurrent-agents.md internal docs/evidence/forge-datastores.md internal docs/evidence/lane-hold.md internal docs/evidence/loot-first.md internal docs/evidence/loot-hosts-loot.md internal docs/evidence/perf-gate.md internal docs/evidence/runs/amend-divergence-demo.txt internal docs/evidence/runs/attack-demo.txt internal docs/evidence/runs/concurrent-agents-demo.txt internal docs/evidence/runs/grant-maroon-demo.txt internal docs/evidence/runs/install-prototype-windows.txt internal docs/evidence/runs/lane-hold-demo.txt internal docs/evidence/runs/sealed-path-demo.txt internal docs/evidence/runs/trust-story-demo.txt internal docs/evidence/runs/wave-proof-lanes-demo.txt internal docs/evidence/scripts/amend-divergence-demo.ps1 internal docs/evidence/scripts/attack-demo.ps1 internal docs/evidence/scripts/concurrent-agents-demo.ps1 internal docs/evidence/scripts/grant-maroon-demo.ps1 internal docs/evidence/scripts/lane-hold-demo.ps1 internal docs/evidence/scripts/sealed-path-demo.ps1 internal docs/evidence/scripts/trust-story-demo.ps1 internal docs/evidence/scripts/wave-proof-lanes-demo.ps1 internal docs/evidence/wave-proof-lanes.md internal docs/lore-comparison.md internal docs/release-day-install-checklist.md internal docs/research/deploy-chain-loot-site.md internal docs/research/forge-blob-tier.md internal docs/research/forge-off-the-vps.md internal docs/research/hero-repitch-prototype.md internal docs/research/install-prototype-loot.md internal docs/research/jj-ergonomics-prototype.md internal docs/research/jj-ergonomics.md internal docs/research/loot-first-workflow-prototype.md internal docs/research/presentational-boundary-audit-millerbyte-frontend.md internal docs/research/release-engineering-install-one-liner.md internal docs/research/shared-store-nwriter-audit.md internal docs/research/ts-sdk-path-scoped-fetching.md internal docs/research/ts-sdk-rust-bridging.md internal docs/research/windows-installer-integrity.md internal docs/second-machine-setup.md internal docs/specs/loot-adopt-target.md internal docs/specs/loot-forge.md internal docs/specs/loot-site.md internal docs/specs/loot-tickets.md internal docs/sql/forge-schema.sql internal issues/CA1-docks.md internal issues/CA2-dock-merge-harbor.md internal issues/CA3-porcelain-machine-output.md internal issues/CA4-buoy-resolver.md internal issues/GB1-git-interop-bridge.md internal issues/README.md internal issues/S1-format-versioning.md internal issues/S2-compress-public-content.md internal issues/S3-signed-changes.md internal issues/S4-attestation-lane.md internal issues/S5-wants-negotiation.md internal issues/S6-resumable-transfer.md internal issues/S7-pluggable-relay-backend-s3.md internal issues/S8-sparse-views.md internal issues/S9-relay-fault-injection-tests.md internal issues/create-agent-issues.sh internal issues/create-issues.sh internal rust-toolchain.toml internal sdk/.gitignore internal sdk/README.md internal sdk/package-lock.json internal sdk/package.json internal sdk/scripts/wasm-stamp.mjs internal sdk/src/errors.ts internal sdk/src/grants.ts internal sdk/src/hex.ts internal sdk/src/index.ts internal sdk/src/loot-runner.ts internal sdk/src/physical.ts internal sdk/src/relay-transport.ts internal sdk/src/repo.ts internal sdk/src/working-overlay.ts internal sdk/test/fixtures/gen-relay-fixtures.mjs internal sdk/test/fixtures/relay-bundles.json internal sdk/test/grants.unit.test.ts internal sdk/test/physical.behavior.test.ts internal sdk/test/physical.unit.test.ts internal sdk/test/private.behavior.test.ts internal sdk/test/pull.behavior.test.ts internal sdk/test/read-contract.ts internal sdk/test/read.behavior.test.ts internal sdk/test/relay.unit.test.ts internal sdk/test/working-overlay.test.ts internal sdk/test/write.behavior.test.ts internal sdk/tsconfig.json internal site/.gitignore internal site/Dockerfile internal site/budget.json internal site/package-lock.json internal site/package.json internal site/src/components/blob-highlight.tsx internal site/src/components/code-block-prism.ts internal site/src/components/code-block.tsx internal site/src/components/forge.tsx internal site/src/components/hero.tsx internal site/src/components/private.tsx internal site/src/lib/forge.ts internal site/src/lib/hero.ts internal site/src/lib/identity/bytes.ts internal site/src/lib/identity/key.ts internal site/src/lib/identity/mnemonic.ts internal site/src/lib/identity/recoveryFile.ts internal site/src/lib/identity/seedblob.ts internal site/src/lib/install.ts internal site/src/lib/installerProxy.ts internal site/src/lib/private/api.ts internal site/src/lib/private/csp.ts internal site/src/lib/private/diff.ts internal site/src/lib/private/engine.ts internal site/src/lib/private/grants.ts internal site/src/lib/private/open.ts internal site/src/lib/private/session.ts internal site/src/lib/private/vault.ts internal site/src/react-syntax-highlighter.d.ts internal site/src/routeTree.gen.ts internal site/src/router.tsx internal site/src/routes/__root.tsx internal site/src/routes/account.tsx internal site/src/routes/api.identity.me.ts internal site/src/routes/api.identity.register.ts internal site/src/routes/api.identity.seed.ts internal site/src/routes/api.private.blob.ts internal site/src/routes/api.private.history.ts internal site/src/routes/api.private.me.ts internal site/src/routes/api.private.path-history.ts internal site/src/routes/api.private.presign.ts internal site/src/routes/api.private.repos.ts internal site/src/routes/api.private.tree.ts internal site/src/routes/docs.tsx internal site/src/routes/evidence.tsx internal site/src/routes/index.tsx internal site/src/routes/install.tsx internal site/src/routes/install[.]ps1.ts internal site/src/routes/install[.]sh.ts internal site/src/routes/k.$owner.$repo.blob.$selector.$.tsx internal site/src/routes/k.$owner.$repo.diff.$from.$to.$.tsx internal site/src/routes/k.$owner.$repo.history.$.tsx internal site/src/routes/k.$owner.$repo.history.index.tsx internal site/src/routes/k.$owner.$repo.index.tsx internal site/src/routes/k.$owner.$repo.tree.$selector.$.tsx internal site/src/routes/k.$owner.index.tsx internal site/src/routes/k.$owner.sitemap[.]xml.ts internal site/src/routes/k.$owner.tsx internal site/src/routes/known-issues.tsx internal site/src/routes/license.tsx internal site/src/routes/private.$owner.$repo.blob.$selector.$.tsx internal site/src/routes/private.$owner.$repo.diff.$from.$to.$.tsx internal site/src/routes/private.$owner.$repo.history.$.tsx internal site/src/routes/private.$owner.$repo.history.index.tsx internal site/src/routes/private.$owner.$repo.tree.$selector.$.tsx internal site/src/routes/private.index.tsx internal site/src/routes/robots[.]txt.ts internal site/src/routes/trust.tsx internal site/src/routes/why.tsx internal site/src/server/credentials.ts internal site/src/server/forge.ts internal site/src/server/identity/clerk.ts internal site/src/server/identity/db.ts internal site/src/server/identity/http.ts internal site/src/server/identity/identity.ts internal site/src/server/owner/blobs.ts internal site/src/server/owner/db.ts internal site/src/server/owner/http.ts internal site/src/server/owner/owner.ts internal site/src/server/read/blob.ts internal site/src/server/read/db.ts internal site/src/server/read/index.ts internal site/src/server/read/read.ts internal site/src/server/read/seal.ts internal site/src/server/read/sigv4.ts internal site/src/server/read/tree.ts internal site/src/server/read/types.ts internal site/src/styles.css internal site/src/vite-env.d.ts internal site/test/alias.pg.test.ts internal site/test/anonymous-links.test.ts internal site/test/code-block.test.ts internal site/test/credentials.test.ts internal site/test/forge.test.ts internal site/test/helpers.ts internal site/test/hero.test.ts internal site/test/identity.pg.test.ts internal site/test/identity.unit.test.ts internal site/test/installerProxy.test.ts internal site/test/owner.pg.test.ts internal site/test/private-csp.test.ts internal site/test/private-diff.test.ts internal site/test/private-engine.test.ts internal site/test/private-grants.test.ts internal site/test/private-open.test.ts internal site/test/private-presign.test.ts internal site/test/read.pg.test.ts internal site/test/release-pin.net.test.ts internal site/test/seal.test.ts internal site/test/sigv4.test.ts internal site/tools/budget.mjs internal site/tsconfig.app.json internal site/tsconfig.json internal site/tsconfig.node.json internal site/vercel.json internal site/vite.config.ts internal site/vitest.config.ts internal tools/claude-worktree-guard.sh internal tools/loot-day.ps1 internal tools/new-agent.ps1 internal (1 sealed path(s) skipped — request a grant to access them) surfaced d31bf81e as reviewer no pending grants at https://relay.millerbyte.com cloned https://relay.millerbyte.com → C:\Users\conno\AppData\Local\Temp\loot-sealed-path-1787501647\agent run `loot status` to see the working tree >>> agent: loot surface (materialize what 'reviewer' may see) .claude/settings.json internal .claude/skills/afk-loop/SKILL.md internal .claude/skills/burn-secret/SKILL.md internal .claude/skills/diagnose-bounce/SKILL.md internal .claude/skills/diagnose-divergent/SKILL.md internal .claude/skills/diagnose-push-rejected/SKILL.md internal .claude/skills/diagnose-visibility/SKILL.md internal .claude/skills/grant-path/SKILL.md internal .claude/skills/land-change/SKILL.md internal .claude/skills/loot-runbooks/BINARIES.md internal .claude/skills/loot-runbooks/SKILL.md internal .claude/skills/maroon-identity/SKILL.md internal .claude/skills/mint-agent-identity/SKILL.md internal .claude/skills/op-restore/SKILL.md internal .claude/skills/review-quarantine/SKILL.md internal .claude/skills/rotate-key/SKILL.md internal .claude/skills/set-embargo/SKILL.md internal .claude/skills/ticket-to-lane/SKILL.md internal .gitattributes internal .github/workflows/site-main.yml internal .github/workflows/test-main.yml internal .gitignore internal .lootattributes internal .lootignore internal .vercelignore internal AGENTS.md internal CONTEXT.md internal Cargo.lock internal Cargo.toml internal LICENSE-APACHE published LICENSE-MIT published README.md published crates/loot-bench/Cargo.toml internal crates/loot-bench/src/lib.rs internal crates/loot-cli/Cargo.toml internal crates/loot-cli/src/bisect.rs internal crates/loot-cli/src/blame.rs internal crates/loot-cli/src/disclosure.rs internal crates/loot-cli/src/doctor.rs internal crates/loot-cli/src/draft.rs internal crates/loot-cli/src/dup.rs internal crates/loot-cli/src/emit.rs internal crates/loot-cli/src/error.rs internal crates/loot-cli/src/evolog.rs internal crates/loot-cli/src/ferry.rs internal crates/loot-cli/src/flags.rs internal crates/loot-cli/src/git_mirror.rs internal crates/loot-cli/src/grep.rs internal crates/loot-cli/src/history.rs internal crates/loot-cli/src/hunks.rs internal crates/loot-cli/src/kv.rs internal crates/loot-cli/src/ledger.rs internal crates/loot-cli/src/lib.rs internal crates/loot-cli/src/main.rs internal crates/loot-cli/src/mergetool.rs internal crates/loot-cli/src/pick.rs internal crates/loot-cli/src/policy.rs internal crates/loot-cli/src/position.rs internal crates/loot-cli/src/reconcile.rs internal crates/loot-cli/src/render.rs internal crates/loot-cli/src/tar.rs internal crates/loot-cli/src/textdiff.rs internal crates/loot-cli/src/tutorial.rs internal crates/loot-cli/src/unlock.rs internal crates/loot-cli/src/verbs/attest.rs internal crates/loot-cli/src/verbs/change.rs internal crates/loot-cli/src/verbs/conflicts.rs internal crates/loot-cli/src/verbs/custody.rs internal crates/loot-cli/src/verbs/grants.rs internal crates/loot-cli/src/verbs/history.rs internal crates/loot-cli/src/verbs/identity.rs internal crates/loot-cli/src/verbs/lane.rs internal crates/loot-cli/src/verbs/mod.rs internal crates/loot-cli/src/verbs/oplog.rs internal crates/loot-cli/src/verbs/relay.rs internal crates/loot-cli/src/verbs/repo.rs internal crates/loot-cli/src/verbs/store.rs internal crates/loot-cli/src/verbs/sync.rs internal crates/loot-cli/src/verbs/view.rs internal crates/loot-cli/src/view.rs internal crates/loot-cli/src/workspace/lanes.rs internal crates/loot-cli/src/workspace/reconcile.rs internal crates/loot-cli/src/workspace/refit.rs internal crates/loot-cli/src/workspace/reports.rs internal crates/loot-cli/src/workspace/take.rs internal crates/loot-cli/src/workspace.rs internal crates/loot-cli/tests/broken_pipe.rs internal crates/loot-cli/tests/cli_smoke.rs internal crates/loot-cli/tests/custody_lock.rs internal crates/loot-cli/tests/describe_contention.rs internal crates/loot-cli/tests/docs_demo.rs internal crates/loot-cli/tests/emit_snapshot.rs internal crates/loot-cli/tests/forge_push.rs internal crates/loot-cli/tests/skill_commands.rs internal crates/loot-cli/tests/sparse_view.rs internal crates/loot-cli/tests/sync_resume.rs internal crates/loot-cli/tests/tutorial.rs internal crates/loot-cli/tests/workspace_publish_guard.rs internal crates/loot-codec/Cargo.toml internal crates/loot-codec/src/attestation.rs internal crates/loot-codec/src/bundle_codec.rs internal crates/loot-codec/src/change_id.rs internal crates/loot-codec/src/envelope.rs internal crates/loot-codec/src/format.rs internal crates/loot-codec/src/hex.rs internal crates/loot-codec/src/key_seal.rs internal crates/loot-codec/src/lib.rs internal crates/loot-codec/src/purge.rs internal crates/loot-codec/src/sealed.rs internal crates/loot-codec/src/treepath.rs internal crates/loot-core/Cargo.toml internal crates/loot-core/examples/patched-client.rs internal crates/loot-core/src/bridge.rs internal crates/loot-core/src/buoy.rs internal crates/loot-core/src/burn.rs internal crates/loot-core/src/converge.rs internal crates/loot-core/src/deposits.rs internal crates/loot-core/src/engine/change_graph.rs internal crates/loot-core/src/engine/custody.rs internal crates/loot-core/src/engine/graph_view.rs internal crates/loot-core/src/engine/merge.rs internal crates/loot-core/src/engine/negotiation.rs internal crates/loot-core/src/engine/object_store.rs internal crates/loot-core/src/engine/persist_codec.rs internal crates/loot-core/src/engine/surface.rs internal crates/loot-core/src/engine.rs internal crates/loot-core/src/escrow.rs internal crates/loot-core/src/lib.rs internal crates/loot-core/src/liveness.rs internal crates/loot-core/src/manifest.rs internal crates/loot-core/src/oplog.rs internal crates/loot-core/src/store.rs internal crates/loot-core/src/testkit.rs internal crates/loot-core/src/verdict.rs internal crates/loot-core/tests/merge_corpus.rs internal crates/loot-first/Cargo.toml internal crates/loot-first/src/forge.rs internal crates/loot-first/src/harbor.rs internal crates/loot-first/src/hygiene.rs internal crates/loot-first/src/lib.rs internal crates/loot-first/src/main.rs internal crates/loot-first/src/orchestrator.rs internal crates/loot-first/src/policy.rs internal crates/loot-first/tests/doc_links.rs internal crates/loot-first/tests/exit_codes.rs internal crates/loot-first/tests/line_endings.rs internal crates/loot-first/tests/runbook_portability.rs internal crates/loot-forge/Cargo.toml internal crates/loot-forge/Dockerfile internal crates/loot-forge/migrations/0002_grant_inbox.sql internal crates/loot-forge/migrations/0003_read_views.sql internal crates/loot-forge/migrations/0004_change_authored_at.sql internal crates/loot-forge/migrations/0005_published_index.sql internal crates/loot-forge/migrations/0006_version_stack.sql internal crates/loot-forge/migrations/0007_identity_writer.sql internal crates/loot-forge/migrations/0008_retired_key_alias.sql internal crates/loot-forge/migrations/0009_owner_read.sql internal crates/loot-forge/migrations/0010_tree_entry_by_object_manifest.sql internal crates/loot-forge/src/blob.rs internal crates/loot-forge/src/conformance.rs internal crates/loot-forge/src/error.rs internal crates/loot-forge/src/grant.rs internal crates/loot-forge/src/inbox.rs internal crates/loot-forge/src/ingest.rs internal crates/loot-forge/src/lib.rs internal crates/loot-forge/src/main.rs internal crates/loot-forge/src/memory.rs internal crates/loot-forge/src/model.rs internal crates/loot-forge/src/pg/inbox.rs internal crates/loot-forge/src/pg/meta.rs internal crates/loot-forge/src/pg/migrate.rs internal crates/loot-forge/src/pg/mod.rs internal crates/loot-forge/src/pg/pool.rs internal crates/loot-forge/src/pg/tests.rs internal crates/loot-forge/src/pg/tls.rs internal crates/loot-forge/src/publish.rs internal crates/loot-forge/src/purge.rs internal crates/loot-forge/src/s3.rs internal crates/loot-forge/src/serve.rs internal crates/loot-forge/src/server.rs internal crates/loot-forge/src/store.rs internal crates/loot-forge/src/sweep.rs internal crates/loot-forge/tests/account_tier.rs internal crates/loot-forge/tests/http.rs internal crates/loot-forge/tests/ingest_and_serve.rs internal crates/loot-identity/Cargo.toml internal crates/loot-identity/src/bip39-english.txt internal crates/loot-identity/src/key_seal.rs internal crates/loot-identity/src/lib.rs internal crates/loot-identity/src/mnemonic.rs internal crates/loot-identity/src/peers.rs internal crates/loot-identity/src/seed_seal.rs internal crates/loot-net/Cargo.toml internal crates/loot-net/src/args.rs internal crates/loot-net/src/auth.rs internal crates/loot-net/src/forge.rs internal crates/loot-net/src/lib.rs internal crates/loot-net/src/mailbox.rs internal crates/loot-net/src/relay_store.rs internal crates/loot-net/src/storage.rs internal crates/loot-net/tests/fault_injection.rs internal crates/loot-net/tests/relay_maintenance.rs internal crates/loot-net/tests/sync_round_trip.rs internal crates/loot-perf/Cargo.toml internal crates/loot-perf/examples/offer_corpus.rs internal crates/loot-perf/src/bin/loot-perf-cli.rs internal crates/loot-perf/src/bin/loot-perf-gate.rs internal crates/loot-perf/src/cli.rs internal crates/loot-perf/src/fixture.rs internal crates/loot-perf/src/gate.rs internal crates/loot-perf/src/lib.rs internal crates/loot-perf/src/load.rs internal crates/loot-perf/src/measure.rs internal crates/loot-perf/src/pinned.rs internal crates/loot-perf/src/record.rs internal crates/loot-relay-contract/Cargo.toml internal crates/loot-relay-contract/src/lib.rs internal crates/loot-relay-contract/tests/fs_backend.rs internal crates/loot-relay-contract/tests/the_suite_asks_every_rule.rs internal crates/loot-relayd/Cargo.toml internal crates/loot-relayd/src/lib.rs internal crates/loot-relayd/src/main.rs internal crates/loot-relayd/tests/object_store_relay.rs internal crates/loot-revset/Cargo.toml internal crates/loot-revset/src/error.rs internal crates/loot-revset/src/eval.rs internal crates/loot-revset/src/lexer.rs internal crates/loot-revset/src/lib.rs internal crates/loot-revset/src/parser.rs internal crates/loot-revset/tests/revset.rs internal crates/loot-s3/Cargo.toml internal crates/loot-s3/src/lib.rs internal crates/loot-wasm/Cargo.toml internal crates/loot-wasm/src/lib.rs internal crates/loot-wasm/tests/parity.rs internal crates/spike-crdt/Cargo.toml internal crates/spike-crdt/src/lib.rs internal crates/spike-dag/Cargo.toml internal crates/spike-dag/src/lib.rs internal dist-workspace.toml internal docs/adr/0001-per-content-decrypt-then-merge-convergence.md internal docs/adr/0002-encrypted-dag-foundation.md internal docs/adr/0003-sealed-content-module-keyring-custody.md internal docs/adr/0004-drop-plaintext-dedup-equality-oracle.md internal docs/adr/0005-cli-slice-persistence-and-attributes.md internal docs/adr/0006-workspace-auto-snapshot.md internal docs/adr/0007-embargo-escrow-module.md internal docs/adr/0008-grant-log-and-targeted-key-bundles.md internal docs/adr/0009-two-level-revocation.md internal docs/adr/0010-forward-maroon-implementation.md internal docs/adr/0011-relay-stow-append-only.md internal docs/adr/0012-per-object-loose-storage.md internal docs/adr/0013-named-remotes-and-grant-bundle-delivery.md internal docs/adr/0014-identity-keypairs-openssh-ed25519.md internal docs/adr/0015-grant-authentication-and-trust.md internal docs/adr/0016-identity-portability-and-rotation.md internal docs/adr/0017-repostore-loot-layout.md internal docs/adr/0018-signed-changes-authored-history.md internal docs/adr/0019-format-versioning-and-compatibility.md internal docs/adr/0020-compress-public-content.md internal docs/adr/0021-object-level-wants-negotiation.md internal docs/adr/0022-concurrent-agent-model-docks.md internal docs/adr/0023-agent-facing-machine-output.md internal docs/adr/0024-resumable-transfer.md internal docs/adr/0025-buoy-resolver.md internal docs/adr/0026-agent-identity-model.md internal docs/adr/0027-hard-embargo-timed-sealed-grants.md internal docs/adr/0028-git-interop-bridge.md internal docs/adr/0029-stable-change-ids.md internal docs/adr/0030-implicit-auto-snapshot-and-verb-surface.md internal docs/adr/0031-operation-log-and-undo.md internal docs/adr/0032-amend-supersession-and-loot-edit.md internal docs/adr/0033-projecting-amended-changes-to-git.md internal docs/adr/0034-sealed-lanes-over-a-shared-store.md internal docs/adr/0035-lane-lifecycle.md internal docs/adr/0036-harbor-serialized-integrator.md internal docs/adr/0037-loot-product-site-and-install.md internal docs/adr/0038-burn-and-the-mis-seal-gate.md internal docs/adr/0039-review-is-a-pure-projection.md internal docs/adr/0040-loot-codec-and-the-wasm-core.md internal docs/adr/0041-public-multi-tenant-loot-forge.md internal docs/adr/0042-sealable-tickets-in-the-repos-own-tree.md internal docs/adr/0043-authored-timestamps-as-a-signed-label.md internal docs/adr/0044-three-way-content-merge-at-the-converge-seam.md internal docs/adr/0045-github-stays-private-and-the-download-path-moves-to-r2.md internal docs/adr/0046-forge-backups-are-operator-recovery-and-a-restore-replays-the-revocation-journal.md internal docs/adr/0047-the-lanes-hold-position-scoped-custody.md internal docs/adr/0048-a-relay-is-measured-not-capped.md internal docs/adr/0049-deploy-releases-build-and-publish-off-github.md internal docs/adr/0050-a-land-runs-from-a-lane.md internal docs/adr/0051-tree-paths-are-stored-with-one-separator.md internal docs/adr/0052-a-relay-retires-a-head-never-content.md internal docs/adr/0053-the-bridge-learns-landed-main-from-the-checkout.md internal docs/adr/0054-an-empty-holder-list-is-unknown-not-nobody.md internal docs/adr/0055-a-land-gates-the-tree-it-publishes.md internal docs/adr/0056-a-store-knows-which-machine-materialized-it.md internal docs/adr/0057-a-push-deposits-this-identitys-own-keys.md internal docs/adr/0058-uncaptured-primary-work-leaves-by-explicit-take.md internal docs/adr/0059-credentials-arrive-by-file-the-environment-stays-the-dev-path.md internal docs/adr/0060-the-public-bucket-carries-binaries-not-source.md internal docs/adr/0061-the-forges-door-is-a-custody-list-not-a-capacity-gate.md internal docs/adr/0062-an-afk-run-approves-its-own-review-prs.md internal docs/adr/0063-lane-merge-is-retired-a-land-is-the-only-fold.md internal docs/adr/0064-loot-is-not-on-crates-io-and-its-names-are-held-anyway.md internal docs/adr/0065-a-hygiene-check-runs-at-the-moment-that-makes-it-true.md internal docs/adr/0066-the-alpha-promises-the-repo-not-the-interface.md internal docs/adr/0067-the-install-smoke-gates-staged-bytes-and-detects-published-ones.md internal docs/adr/0068-custody-at-rest-is-sealed-to-your-own-key-behind-an-optional-passphrase.md internal docs/adr/0069-internal-stays-the-default-tier.md internal docs/adr/0070-an-object-store-relay-is-a-second-deployable-the-cli-ships-no-driver.md internal docs/adr/0071-the-site-gate-is-a-build-and-a-per-surface-byte-ceiling.md internal docs/agents/concurrent.md internal docs/agents/identity.md internal docs/agents/issue-tracker.md internal docs/agents/workflow.md internal docs/bakeoff/index.html internal docs/benchmarks/level-c-proof.md internal docs/benchmarks/series/028826355afe53046bef50b0c1c8c9e4.json internal docs/benchmarks/series/046f7b9ecdc1d70f5f5c877e834dc22e.json internal docs/benchmarks/series/05cd774bda937b9132f78e2e4caec6a9.json internal docs/benchmarks/series/05deb2339e2b0d22f7349c25adda3f9a.json internal docs/benchmarks/series/061a50b881bf7575de05894d1fd84a17.json internal docs/benchmarks/series/063031023c690cc4b4ac36627e3a6252.json internal docs/benchmarks/series/0630f74d5a8214f6272dcf748625922c.json internal docs/benchmarks/series/09e4e9b77df1e8fc4f53350faa7dc0a0.json internal docs/benchmarks/series/0a0a999ee7cb7125a5dba08780cf0154.json internal docs/benchmarks/series/0a0d3e37f6c1906f062baf76e5d0bdb5.json internal docs/benchmarks/series/0a4afa36500e4f2c4e4cf1e67a146dee.json internal docs/benchmarks/series/0c69c26d6bf8ece417d0e5f2893bde34.json internal docs/benchmarks/series/0d9f140dab75dc65ccba8afd7b5c65b0.json internal docs/benchmarks/series/0e5b19b49b7a9e8abcb0b3683713a761.json internal docs/benchmarks/series/0ed6408ad9ee09599e1d6e28db8b3d73.json internal docs/benchmarks/series/11e40e4d65e7a51c05ae9cf74540a331.json internal docs/benchmarks/series/12b4a2b80cf38f203528ab2f8fcb7a4e.json internal docs/benchmarks/series/12f76e1bc780456f166dc520a1d8c5d8.json internal docs/benchmarks/series/13d67aca15d5627aa1c58e3cac7c189b.json internal docs/benchmarks/series/150fdfd2c40e075d2f6e05eeb2e9efaf.json internal docs/benchmarks/series/15eb5a6a286cd317f6bcfd96244b5052.json internal docs/benchmarks/series/15fc913af64af9ee5ee36697324ac209.json internal docs/benchmarks/series/16f779bd952e8e300b326cab50a04644.json internal docs/benchmarks/series/187ab50109449e31cdbccb676b367120.json internal docs/benchmarks/series/19e8f429081483bb09da68b414832dbc.json internal docs/benchmarks/series/1bf06c2fc99d2ce59c81ead4ce6c3cdd.json internal docs/benchmarks/series/1c7e75bc30f53ac952a7b84da2267fbe.json internal docs/benchmarks/series/1caf8f0479e90be97ca47ee8807c1e9a.json internal docs/benchmarks/series/1f4f5ebff436d27c3e5e879b04888389.json internal docs/benchmarks/series/20cc3e7e913e0e3fb7200009a5ca6044.json internal docs/benchmarks/series/2238a37b610a70c0c4a959358dab514e.json internal docs/benchmarks/series/226201ea4b7e69ead709d37776748a4c.json internal docs/benchmarks/series/237975a79b6fe5c1de263d6191cb0b7e.json internal docs/benchmarks/series/239cff6bba46860f6ecab32915d823fc.json internal docs/benchmarks/series/23bde6c42588a5176badbf91d029dea1.json internal docs/benchmarks/series/28c010bff9a1ff8a3c27d63c7112d9b6.json internal docs/benchmarks/series/28ec5090aada67162f07d4c8d3e549c1.json internal docs/benchmarks/series/29105c284535b16a4434a441d5a45c19.json internal docs/benchmarks/series/2a13476b871c9aa3415c775f9f3df9ad.json internal docs/benchmarks/series/2d3f02ceae3c90282d236e2da70b5f23.json internal docs/benchmarks/series/2e7113f6990841f96592b68d94ab9b14.json internal docs/benchmarks/series/2e9092b38de3d5f317f17fe95ca9a769.json internal docs/benchmarks/series/2f6afeafbafe22ebdf59d30d8dd34b42.json internal docs/benchmarks/series/308669e881929362f54f576b341d0ff5.json internal docs/benchmarks/series/30b86fe93b6b0c047b0194ea5c5aad6b.json internal docs/benchmarks/series/314a197ad9d8c644e715da623529f63f.json internal docs/benchmarks/series/31aedc3b86c19b1259a4f7318b6a24ec.json internal docs/benchmarks/series/3232c95d09276a447505291131e1fefd.json internal docs/benchmarks/series/33a0d489d7f2e2942b02a9eee3f56dc8.json internal docs/benchmarks/series/382645c7c19c103e52d810a10cd7f290.json internal docs/benchmarks/series/39b8b1966801a51dbad161133db6260c.json internal docs/benchmarks/series/3d76c7397da07b4c938c3e2077837cd5.json internal docs/benchmarks/series/3fc15007f3258b663654678d50f7ffea.json internal docs/benchmarks/series/4040bc822da0d978c9b98eff6d68a016.json internal docs/benchmarks/series/40c63a46753cfe53a1af155b090ade4d.json internal docs/benchmarks/series/418c29ae5cb594de966a7b6fbb13a1cf.json internal docs/benchmarks/series/42dea0586072d4410de16e45ffa47c69.json internal docs/benchmarks/series/4386d067201c1e75956184e927fceaba.json internal docs/benchmarks/series/445e542c803bb956ecbbbf628b937f72.json internal docs/benchmarks/series/479076dcfde507e7b74f9957bff09599.json internal docs/benchmarks/series/482b98a5eaeca16b63ab554357021a8c.json internal docs/benchmarks/series/48a504f4d3ea51cc423657c7c735087d.json internal docs/benchmarks/series/49f6a68c35c55158ff751420b8a5a99e.json internal docs/benchmarks/series/4a51266a8eacbb818bbc0c22811eeaa5.json internal docs/benchmarks/series/4ae36e3ac8b55a8eddf10f005107f16b.json internal docs/benchmarks/series/4c32c1e407af4755a59464c726f8ab0f.json internal docs/benchmarks/series/4d6d5b819274aea7b833af8fe933751e.json internal docs/benchmarks/series/519290b69a6849f04c7fc5402ecf75ff.json internal docs/benchmarks/series/51afe3e37a8f0543fd4fc95e97e817c4.json internal docs/benchmarks/series/52869b25ee6388b901edd5d9a85c1a60.json internal docs/benchmarks/series/53673e5df58804f4da23ee6515f068da.json internal docs/benchmarks/series/559ca38a99733ce284d2816e57298aa2.json internal docs/benchmarks/series/5a09a5cf0ab34b3d1c46f9a368036eb6.json internal docs/benchmarks/series/5a74641c3a26b2e66eccf0fc81462033.json internal docs/benchmarks/series/5acd6c2d5010d65d71ba378ca84ca87d.json internal docs/benchmarks/series/5c53b6515bdd708cecfa846a714a781e.json internal docs/benchmarks/series/5d71b9982451702788b8a4997f5fb23f.json internal docs/benchmarks/series/5dab0ef3553db2d049fc02de3dfd46e9.json internal docs/benchmarks/series/601f7fae489529fbd78c218163354682.json internal docs/benchmarks/series/6042a9bd5eb0b4b32c1671ffc065de7e.json internal docs/benchmarks/series/616a3b7459d86c2f8dedd2328a686700.json internal docs/benchmarks/series/6203fa4267075e0f83498a598e8c2bd0.json internal docs/benchmarks/series/62f2809ec9af2b2c82376c88debef144.json internal docs/benchmarks/series/666bd9140d485f9c1706d4c5abf0d6c1.json internal docs/benchmarks/series/67c0d70547abbc2640bb69201e1df9ff.json internal docs/benchmarks/series/67cbcf09aee8b66111c9e942c3f44eaf.json internal docs/benchmarks/series/681642ea872702054990ac41b777dd14.json internal docs/benchmarks/series/68bc0ff8c6c4c79125825510de0a14de.json internal docs/benchmarks/series/6b16101bca7fe39afa61713c7086a00c.json internal docs/benchmarks/series/6b4673bc551d8fbe64556789defb31b0.json internal docs/benchmarks/series/6d8c826443187a44739ad4682a232e7a.json internal docs/benchmarks/series/735dd300664098092c8479c9820bfbee.json internal docs/benchmarks/series/73d793f864728346702b4f766ffe6ecb.json internal docs/benchmarks/series/74a4d5cb1abbde542100399ac9e4d609.json internal docs/benchmarks/series/751f1485596090235cb3d869be93906c.json internal docs/benchmarks/series/7730460d7b4ece4c6e11e49e3dd2928a.json internal docs/benchmarks/series/77c04ee442e1861d4091d3cb5ed221b5.json internal docs/benchmarks/series/794a8b73e013ebecd6ad5b21a8bbc328.json internal docs/benchmarks/series/79ac53bbc01d821cd0dbce2874c804af.json internal docs/benchmarks/series/7af080758e50e28ebd39d0a70986a020.json internal docs/benchmarks/series/7d787f08b695a8e086fa4a8e11259f6d.json internal docs/benchmarks/series/7ed47eda57bb5baf88f8c2408d7d6dab.json internal docs/benchmarks/series/7ef26f633466df80cd131cc63082a027.json internal docs/benchmarks/series/80091cd23238c47a2d4827ab54778ed4.json internal docs/benchmarks/series/809b8bb3cf50b4aabbb36a1fbbdcbe7e.json internal docs/benchmarks/series/80e81d847cc2569be709a4e59a98f6af.json internal docs/benchmarks/series/80f3dd0ff1a3a03d7e528235c7e6c586.json internal docs/benchmarks/series/814d1fcfe650d279c8b2184cd0e5548b.json internal docs/benchmarks/series/82982d8206b46ec3d2db6719fa42530a.json internal docs/benchmarks/series/82fbb9eb29afcbad962719ce7a1ac672.json internal docs/benchmarks/series/8409e44d9d8b2415b09b2c0fc437038f.json internal docs/benchmarks/series/841ec5f40b97a0451c0a83d7ee78aa13.json internal docs/benchmarks/series/8611c6f2b378c55d5452ebab1984b8ed.json internal docs/benchmarks/series/8b8decb06438ea7d8a7d0910ed6adfbe.json internal docs/benchmarks/series/8d103ea93de36dfa838bc10a864ce566.json internal docs/benchmarks/series/8dd5567ddc93db6b4a6a0765547e2397.json internal docs/benchmarks/series/8fbc3f3b8c70db3a1ec7fa14beafe7e6.json internal docs/benchmarks/series/9177bc510c951d747829680d02b3b2bc.json internal docs/benchmarks/series/926464bd1aab63ba0566fb59b2585e47.json internal docs/benchmarks/series/9278bcddee4d9c10a93d2b00866bfec7.json internal docs/benchmarks/series/95020bb3489585777a77a4d2692f45af.json internal docs/benchmarks/series/956fce0c46ee56dc537af5ef56d781f6.json internal docs/benchmarks/series/98631b8e2a13b877ef37869f2ce5c7b0.json internal docs/benchmarks/series/986ab45e0492e87b09be5c444154cf27.json internal docs/benchmarks/series/990c5cd54f3d07bdc1450bd9e83eccdb.json internal docs/benchmarks/series/9b4d823518270ec35967a490ffa568ad.json internal docs/benchmarks/series/9d251c9426ed7abecb886ace50d6cb69.json internal docs/benchmarks/series/9e2a53e9f680e272ed2d5532fd97b5fc.json internal docs/benchmarks/series/9e775525f5d207a00a544841a5eed366.json internal docs/benchmarks/series/a0339599164efafb37854728d616ebf7.json internal docs/benchmarks/series/a31a0fb8fc301dd662fa745b1320c70f.json internal docs/benchmarks/series/a389b7abde0979680eef738f15411395.json internal docs/benchmarks/series/a7f1ee0f442da5a8ebf18113e8875bab.json internal docs/benchmarks/series/a8bc4435292e16ad497064f5d633fd68.json internal docs/benchmarks/series/aafc18d6c879b352f4bd242c0a17a44b.json internal docs/benchmarks/series/ab647cde7faa215725418831fdc1dc4d.json internal docs/benchmarks/series/ae0a800e9b0718871941c83d92549040.json internal docs/benchmarks/series/aea7632cae3cf92b34974c670b109c18.json internal docs/benchmarks/series/b13c688922bda6fd11ac756df47af803.json internal docs/benchmarks/series/b23ed6218152821e5151257649d8e6e2.json internal docs/benchmarks/series/b349edf62b082e3b8c05b2331ae51b96.json internal docs/benchmarks/series/b40e3a0f43fa5a15fd510086abe5ae80.json internal docs/benchmarks/series/b4862b264b4ec20a771fc729d82c5a79.json internal docs/benchmarks/series/b5f2c1da4db10382876c7648a5ae1316.json internal docs/benchmarks/series/b733ac785ae9f0c15a924fd9b76b73a0.json internal docs/benchmarks/series/b74b292392962bd6218a7fdcc23445bb.json internal docs/benchmarks/series/b781c7bfe9431361963754880b750969.json internal docs/benchmarks/series/b949ef859c28d21bf445987cd9a53fc1.json internal docs/benchmarks/series/bb58ed9a272f218a4bc58ce744f29f32.json internal docs/benchmarks/series/bc350acbd3108d5e427ba4778f4e3ecd.json internal docs/benchmarks/series/bfe705ec01139b7124f0ee9d39bfc6c8.json internal docs/benchmarks/series/bffd8ad24ab792e12bdaca5171446d2d.json internal docs/benchmarks/series/c022c440a3b2cce037cb20ef334bed4b.json internal docs/benchmarks/series/c1b77fcce90ac884a935f22dd70a1575.json internal docs/benchmarks/series/c23d9e2cf01fd9509ff97f125b2e6eb5.json internal docs/benchmarks/series/c2b58d0b59e24e6ab307a7df7ea2c2ac.json internal docs/benchmarks/series/c5e6e1e0eee3406e68197af87bd662a3.json internal docs/benchmarks/series/c64b8806b48153a3596c4f68a57bd2bc.json internal docs/benchmarks/series/c81470b1216e6b16666399fcf9a5afba.json internal docs/benchmarks/series/c95a07150672624c22988255456bd83a.json internal docs/benchmarks/series/cec6b2e92e2042203ae643d1d664c2ab.json internal docs/benchmarks/series/cf3501296e9dbb153fc55961c5e766e9.json internal docs/benchmarks/series/d1454de7f4c42583ecf43ca7c06bf7b7.json internal docs/benchmarks/series/d3f8e434306afbcf48b82b4a6bc04860.json internal docs/benchmarks/series/d4317597797136c2d1547794141d8cff.json internal docs/benchmarks/series/d89b87f08bfc4f00ea9d7ac47b6fdfca.json internal docs/benchmarks/series/d8bb946b35d22e718d8dc568a8985257.json internal docs/benchmarks/series/da1d5de4e4a31e665ea1c32e12ef3dcd.json internal docs/benchmarks/series/dab1a40bfe89924b00dd9351f92d3690.json internal docs/benchmarks/series/daea73f021edf6789cded5975619e60e.json internal docs/benchmarks/series/db568618a99475db7fdf4b807094d052.json internal docs/benchmarks/series/dba8579287743bf36d6a22c944b63615.json internal docs/benchmarks/series/dbf01e6def8ca0401324f3ae9f639d3d.json internal docs/benchmarks/series/dc346b361770996dfa97cccff98f222b.json internal docs/benchmarks/series/dcda94167b6b854464d2376d5e901e2e.json internal docs/benchmarks/series/dd1353ff67c1b35b75db46914d675ad7.json internal docs/benchmarks/series/defee3b8c0e68c22bb56b471d83f6612.json internal docs/benchmarks/series/df37ba7bc50177eff43217132ce5ff51.json internal docs/benchmarks/series/e1882f6e306841ed1354d6e85c461790.json internal docs/benchmarks/series/e1fce2c3ab6c67d4f350060d5529b84b.json internal docs/benchmarks/series/e2667c08c6b6cf8a2aadd970676a2c36.json internal docs/benchmarks/series/e2d1b31b65301fb65b2571785e342129.json internal docs/benchmarks/series/e368a411768cf1e607d9fa874492d895.json internal docs/benchmarks/series/e41f8f22f5030220a3d1d8198ab884c9.json internal docs/benchmarks/series/e52416698095aa9d17ce548a39eff053.json internal docs/benchmarks/series/e68506f2016674c600e7b57ddac915ce.json internal docs/benchmarks/series/e7dbf240031fa3ae5884770e4d0f8a32.json internal docs/benchmarks/series/e8ae3fc1f1fbeaf2b18292caf41e791c.json internal docs/benchmarks/series/ea0cf44f25d0d11ebc9b1b17378ec8a0.json internal docs/benchmarks/series/eb1f872bdc14d46ff6ecdceb4e6d7ba1.json internal docs/benchmarks/series/eb25bdbc91a5aac286aa4059b51d8c61.json internal docs/benchmarks/series/eb3e77914c3b04748d7caf29aebc0176.json internal docs/benchmarks/series/ec6ee2528c07a7435ec220fa93be7c84.json internal docs/benchmarks/series/ecc054b55b42a6844482eeab182823cd.json internal docs/benchmarks/series/efa8dbe44c84e15efe93607f982777c6.json internal docs/benchmarks/series/f05f344405835841c5cfbedefc34c0f7.json internal docs/benchmarks/series/f0b5a1746058da1ecfc8344ccfba4bcc.json internal docs/benchmarks/series/f12a6561a72c8c28b4da437e1f9c7398.json internal docs/benchmarks/series/f1832117ac15046e07ed4b70dea7fc26.json internal docs/benchmarks/series/f27c6f313764d079e7d5bfd2be22bd91.json internal docs/benchmarks/series/f3bbea589328d671d46367c47df8af81.json internal docs/benchmarks/series/f46a87f01fa3bc1eed2cd1ace3d14a6a.json internal docs/benchmarks/series/f778484958b0d985949a873c06971886.json internal docs/benchmarks/series/f859444b43b897c2fb56b7e086ed06fa.json internal docs/benchmarks/series/f89727757e2465113c27fcc619643bb7.json internal docs/benchmarks/series/f8dc012ec6baf483cf31cac7bfb3c738.json internal docs/benchmarks/series/fa0fb1042627c07a9712a377223c9bc0.json internal docs/benchmarks/series/fa437398e27c69aabd763b6dffb30f0b.json internal docs/benchmarks/series/fc5558b1e2122e6289676e2f5d0123bd.json internal docs/benchmarks/series/fe1abad66671821e22d9aef8ff6cec7b.json internal docs/benchmarks/series/fe231a0c0a9a08e89ee1c7ccd94aa0db.json internal docs/benchmarks/series/fe36474a59b2a07f8520100ea744a3cf.json internal docs/benchmarks/series/fed72d440c538cee478f94eadd3510e9.json internal docs/benchmarks/series.jsonl internal docs/dogfood/drive-log.md internal docs/evidence/amend-divergence.md internal docs/evidence/concurrent-agents.md internal docs/evidence/forge-datastores.md internal docs/evidence/lane-hold.md internal docs/evidence/loot-first.md internal docs/evidence/loot-hosts-loot.md internal docs/evidence/perf-gate.md internal docs/evidence/runs/amend-divergence-demo.txt internal docs/evidence/runs/attack-demo.txt internal docs/evidence/runs/concurrent-agents-demo.txt internal docs/evidence/runs/grant-maroon-demo.txt internal docs/evidence/runs/install-prototype-windows.txt internal docs/evidence/runs/lane-hold-demo.txt internal docs/evidence/runs/sealed-path-demo.txt internal docs/evidence/runs/trust-story-demo.txt internal docs/evidence/runs/wave-proof-lanes-demo.txt internal docs/evidence/scripts/amend-divergence-demo.ps1 internal docs/evidence/scripts/attack-demo.ps1 internal docs/evidence/scripts/concurrent-agents-demo.ps1 internal docs/evidence/scripts/grant-maroon-demo.ps1 internal docs/evidence/scripts/lane-hold-demo.ps1 internal docs/evidence/scripts/sealed-path-demo.ps1 internal docs/evidence/scripts/trust-story-demo.ps1 internal docs/evidence/scripts/wave-proof-lanes-demo.ps1 internal docs/evidence/wave-proof-lanes.md internal docs/lore-comparison.md internal docs/release-day-install-checklist.md internal docs/research/deploy-chain-loot-site.md internal docs/research/forge-blob-tier.md internal docs/research/forge-off-the-vps.md internal docs/research/hero-repitch-prototype.md internal docs/research/install-prototype-loot.md internal docs/research/jj-ergonomics-prototype.md internal docs/research/jj-ergonomics.md internal docs/research/loot-first-workflow-prototype.md internal docs/research/presentational-boundary-audit-millerbyte-frontend.md internal docs/research/release-engineering-install-one-liner.md internal docs/research/shared-store-nwriter-audit.md internal docs/research/ts-sdk-path-scoped-fetching.md internal docs/research/ts-sdk-rust-bridging.md internal docs/research/windows-installer-integrity.md internal docs/second-machine-setup.md internal docs/specs/loot-adopt-target.md internal docs/specs/loot-forge.md internal docs/specs/loot-site.md internal docs/specs/loot-tickets.md internal docs/sql/forge-schema.sql internal issues/CA1-docks.md internal issues/CA2-dock-merge-harbor.md internal issues/CA3-porcelain-machine-output.md internal issues/CA4-buoy-resolver.md internal issues/GB1-git-interop-bridge.md internal issues/README.md internal issues/S1-format-versioning.md internal issues/S2-compress-public-content.md internal issues/S3-signed-changes.md internal issues/S4-attestation-lane.md internal issues/S5-wants-negotiation.md internal issues/S6-resumable-transfer.md internal issues/S7-pluggable-relay-backend-s3.md internal issues/S8-sparse-views.md internal issues/S9-relay-fault-injection-tests.md internal issues/create-agent-issues.sh internal issues/create-issues.sh internal rust-toolchain.toml internal sdk/.gitignore internal sdk/README.md internal sdk/package-lock.json internal sdk/package.json internal sdk/scripts/wasm-stamp.mjs internal sdk/src/errors.ts internal sdk/src/grants.ts internal sdk/src/hex.ts internal sdk/src/index.ts internal sdk/src/loot-runner.ts internal sdk/src/physical.ts internal sdk/src/relay-transport.ts internal sdk/src/repo.ts internal sdk/src/working-overlay.ts internal sdk/test/fixtures/gen-relay-fixtures.mjs internal sdk/test/fixtures/relay-bundles.json internal sdk/test/grants.unit.test.ts internal sdk/test/physical.behavior.test.ts internal sdk/test/physical.unit.test.ts internal sdk/test/private.behavior.test.ts internal sdk/test/pull.behavior.test.ts internal sdk/test/read-contract.ts internal sdk/test/read.behavior.test.ts internal sdk/test/relay.unit.test.ts internal sdk/test/working-overlay.test.ts internal sdk/test/write.behavior.test.ts internal sdk/tsconfig.json internal site/.gitignore internal site/Dockerfile internal site/budget.json internal site/package-lock.json internal site/package.json internal site/src/components/blob-highlight.tsx internal site/src/components/code-block-prism.ts internal site/src/components/code-block.tsx internal site/src/components/forge.tsx internal site/src/components/hero.tsx internal site/src/components/private.tsx internal site/src/lib/forge.ts internal site/src/lib/hero.ts internal site/src/lib/identity/bytes.ts internal site/src/lib/identity/key.ts internal site/src/lib/identity/mnemonic.ts internal site/src/lib/identity/recoveryFile.ts internal site/src/lib/identity/seedblob.ts internal site/src/lib/install.ts internal site/src/lib/installerProxy.ts internal site/src/lib/private/api.ts internal site/src/lib/private/csp.ts internal site/src/lib/private/diff.ts internal site/src/lib/private/engine.ts internal site/src/lib/private/grants.ts internal site/src/lib/private/open.ts internal site/src/lib/private/session.ts internal site/src/lib/private/vault.ts internal site/src/react-syntax-highlighter.d.ts internal site/src/routeTree.gen.ts internal site/src/router.tsx internal site/src/routes/__root.tsx internal site/src/routes/account.tsx internal site/src/routes/api.identity.me.ts internal site/src/routes/api.identity.register.ts internal site/src/routes/api.identity.seed.ts internal site/src/routes/api.private.blob.ts internal site/src/routes/api.private.history.ts internal site/src/routes/api.private.me.ts internal site/src/routes/api.private.path-history.ts internal site/src/routes/api.private.presign.ts internal site/src/routes/api.private.repos.ts internal site/src/routes/api.private.tree.ts internal site/src/routes/docs.tsx internal site/src/routes/evidence.tsx internal site/src/routes/index.tsx internal site/src/routes/install.tsx internal site/src/routes/install[.]ps1.ts internal site/src/routes/install[.]sh.ts internal site/src/routes/k.$owner.$repo.blob.$selector.$.tsx internal site/src/routes/k.$owner.$repo.diff.$from.$to.$.tsx internal site/src/routes/k.$owner.$repo.history.$.tsx internal site/src/routes/k.$owner.$repo.history.index.tsx internal site/src/routes/k.$owner.$repo.index.tsx internal site/src/routes/k.$owner.$repo.tree.$selector.$.tsx internal site/src/routes/k.$owner.index.tsx internal site/src/routes/k.$owner.sitemap[.]xml.ts internal site/src/routes/k.$owner.tsx internal site/src/routes/known-issues.tsx internal site/src/routes/license.tsx internal site/src/routes/private.$owner.$repo.blob.$selector.$.tsx internal site/src/routes/private.$owner.$repo.diff.$from.$to.$.tsx internal site/src/routes/private.$owner.$repo.history.$.tsx internal site/src/routes/private.$owner.$repo.history.index.tsx internal site/src/routes/private.$owner.$repo.tree.$selector.$.tsx internal site/src/routes/private.index.tsx internal site/src/routes/robots[.]txt.ts internal site/src/routes/trust.tsx internal site/src/routes/why.tsx internal site/src/server/credentials.ts internal site/src/server/forge.ts internal site/src/server/identity/clerk.ts internal site/src/server/identity/db.ts internal site/src/server/identity/http.ts internal site/src/server/identity/identity.ts internal site/src/server/owner/blobs.ts internal site/src/server/owner/db.ts internal site/src/server/owner/http.ts internal site/src/server/owner/owner.ts internal site/src/server/read/blob.ts internal site/src/server/read/db.ts internal site/src/server/read/index.ts internal site/src/server/read/read.ts internal site/src/server/read/seal.ts internal site/src/server/read/sigv4.ts internal site/src/server/read/tree.ts internal site/src/server/read/types.ts internal site/src/styles.css internal site/src/vite-env.d.ts internal site/test/alias.pg.test.ts internal site/test/anonymous-links.test.ts internal site/test/code-block.test.ts internal site/test/credentials.test.ts internal site/test/forge.test.ts internal site/test/helpers.ts internal site/test/hero.test.ts internal site/test/identity.pg.test.ts internal site/test/identity.unit.test.ts internal site/test/installerProxy.test.ts internal site/test/owner.pg.test.ts internal site/test/private-csp.test.ts internal site/test/private-diff.test.ts internal site/test/private-engine.test.ts internal site/test/private-grants.test.ts internal site/test/private-open.test.ts internal site/test/private-presign.test.ts internal site/test/read.pg.test.ts internal site/test/release-pin.net.test.ts internal site/test/seal.test.ts internal site/test/sigv4.test.ts internal site/tools/budget.mjs internal site/tsconfig.app.json internal site/tsconfig.json internal site/tsconfig.node.json internal site/vercel.json internal site/vite.config.ts internal site/vitest.config.ts internal tools/claude-worktree-guard.sh internal tools/loot-day.ps1 internal tools/new-agent.ps1 internal (1 sealed path(s) skipped — request a grant to access them) surfaced d31bf81e as reviewer PASS: the agent's clone does NOT materialize the sealed path (docs/pitch/zk-host.md absent) PASS: the agent's clone DOES materialize internal content (CONTEXT.md present) PASS: loot reports sealed path(s) skipped for the agent (it holds the ciphertext, not the key) >>> dev: loot whoami (the real repo's identity) identity: connor pubkey: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINvz2+YyJofdHNWWRplLv1RRwA/XVIMi2uHJfLevIzbu connor@loot share with peers: loot peer add connor ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINvz2+YyJofdHNWWRplLv1RRwA/XVIMi2uHJfLevIzbu connor@loot PASS: the dev repo's identity is connor (the grantee of docs/pitch/**) PASS: the dev's working tree HAS the sealed path present and readable (docs/pitch/zk-host.md) >>> dev reads the sealed path (first line of docs/pitch/zk-host.md): # The host that cannot read your code ================ RESULT ================ Same ciphertext on the relay; docs/pitch/ is present for the dev (connor holds the key) and absent for the agent clone (ciphertext only). Visibility is a property of the content, not the repository. Honesty (ADR 0026): this is one machine under one OS user. 'Agents cannot read the sealed path' means key custody PLUS the agent harness's file sandbox -- an honest-participant posture. A hostile process running as the dev's OS user could read the dev's keyring off disk; the claim is about identity-scoped visibility within a cooperating multi-identity repo, which is exactly what the thesis is about. ALL CHECKS PASSED -- the sealed path is dev-visible, agent-invisible. run finished (utc): 2026-08-23 16:36:20Z
evidence doc — docs/evidence/loot-hosts-loot.md
# Evidence: loot hosts loot The concrete, checkable definition of done for the thesis-proof milestone (wayfinder map #54, resolved by ticket #60 on 2026-07-09). The thesis — *visibility and permissions are properties of content and changes, not of the repository* — is proven when every box below is checked. Demo claims are **re-runnable scripts** whose captured output is committed beside this doc (`docs/evidence/scripts/`, outputs in `docs/evidence/runs/`); the daily-driving leg is a dated log (section A). This doc itself rides the relay: the proof is content in the repo the thesis is about. ## Prerequisites (must land before evidence counts) - [x] #61 — `.lootattributes` forward-slash globs fail open to Public on Windows - [x] #62 — attributes edit silently demotes restricted content to Public - [x] #64 — `.lootignore` (pilot: one stray `status` sealed 38 MB of `target/`) - [x] #65 — spurious conflict on content neither side edited - [x] #66 — `loot gc` regression (merged in #17, gone from the CLI) #61/#62 gate every sealed-path claim (a fail-open seal is theater); the rest gate daily driving (per the #56 pilot, a day fighting these is not a day of evidence). ## A. Daily driving — 5 consecutive working days A day counts iff **every change to this repo that day is finalized in loot and pushed to the relay the same day**; git dual-runs as backup only (commits may batch, but loot is the primary record). Divergence pain is logged per day — that log is dogfood data, not failure. Per-day detail lives in [../dogfood/drive-log.md](../dogfood/drive-log.md); the daily ritual is one command, `tools/loot-day.ps1` (see that log's header). | Day | Date | Changes pushed | Divergence / friction notes | |-----|------|----------------|------------------------------| | 1 | 2026-07-10 | `c670cc2b` embargo CLI (#88) + attack demo (#89) + section-B evidence + maroon fix + drive setup | loot was 3 PRs behind git; caught up in one O(delta) push (14 objects), no conflicts | | 2 | 2026-07-10 | `a8cafda5` ferry the git bridge (#114-118) + concurrent-agents epic close-out (#126-131) into loot | git-clean day: ferry ingested 4 commits, 0 conflicts, 0 projected back; 146 objects pushed, resumable | | 3 | 2026-07-11 | ten loot-first lanes, head `yxvnvtox`/`b071df66` (gate #173, arch wave #185-#191, review fixes #192) | inversion day: loot led via `loot-first.ps1`; end-of-day ritual = clean tree, ferry up to date, 0 objects to push (already published at each land) | | 4+ | 2026-07-11 → | *no longer a discrete count* — loot became the standing daily driver (see note below) | every subsequent working day has finalized through `loot-first` lanes and pushed to the relay; e.g. 2026-07-18 landed #175 (regression test) via a lane → PR #317 → signed commit `3e74dd2` → relay push, `docs/pitch/` sealed throughout | - [x] **Satisfied in practice — the discrete 5-day count was superseded by continuous use.** The bar existed to prove loot could carry real daily development; three logged days established the ritual, and loot has been the primary record for every working day since (the `loot-first` orchestrator replaced the day-1 `loot-day.ps1` helper — #218). By 2026-07-18 the question "can we drive on this for days" was long answered by having done so, so we close the count as met-in-spirit rather than manufacture two more dated rows. The streak's *intent* — loot hosts loot, daily — is the repo's normal mode of operation. ## B. Agents as distinct identities (ADR 0026) - [x] First agent identity minted and registered — #86 (`crew` @ `..\loot-crew\crew` via `tools/new-agent.ps1`; peer registry + relay allowlist; clone verified: full public tree present, `docs/pitch/` absent) - [x] **Sealed-path script**: the agent's clone surfaces the repo with `docs/pitch/` absent; the dev's surfaces it present. Script `scripts/sealed-path-demo.ps1`, output `runs/sealed-path-demo.txt` (first run 2026-07-10; re-run 2026-08-23 with a current binary — #1232 — because the committed output predated the `public`→`internal` tier rename and taught the retired word: a fresh non-dev clone materializes 741 internal + 3 published paths and skips the sealed path; the dev repo (connor) reads `docs/pitch/zk-host.md`). Read-only — no push, no relay pollution. - [x] **Grant/maroon script**: grant a restricted path to the agent → agent reads it → maroon the agent → agent's next pull carries the new seal it cannot open. Script `scripts/grant-maroon-demo.ps1`, output `runs/grant-maroon-demo.txt`. Hermetic against a local `loot serve` (the cycle mutates history, so it stays off the shared VPS DAG). The Manifest audit trail (grantor/grantee as pubkeys) is printed. NB: fixed a real bug en route — `loot maroon` recorded the re-seal change unsigned, so it never propagated (ADR 0018: only signed history travels); the CLI now finalizes it. - [x] Honesty statement in the captured output: on one machine under one OS user, "agents cannot read" = key custody **plus the agent harness's file sandbox** (honest-participant posture, per ADR 0026). Both demos print it; grant/maroon also flags that already-decrypted bytes are not forward-secret (ADR 0009). ## C. Hard embargo (ADR 0027) - [x] #14 — engine/wire: timed SealedGrant deposit, relay withholding, `FORMAT_MAJOR` bump - [x] #88 — CLI: push deposits timed grants; `pull-grants` files revealed keys - [x] **Attack-demo script (#89)**: a holder with an advanced clock, direct `.loot/escrow` inspection, and a patched binary **fails** to read the embargoed change before `reveal_at`, then reads it after the relay releases. Script `scripts/attack-demo.ps1`, captured output `runs/attack-demo.txt` (run 2026-07-10 against the live VPS relay; all three pre-reveal attacks failed, post-reveal read succeeded). The demo is **mailbox-only** — the timed SealedGrant is deposited to the holder's pubkey-addressed mailbox (self-draining) and the ciphertext travels as an out-of-band bundle file, so nothing is stowed into the relay's shared DAG. - [x] Honesty statement in the captured output: the claim is **holder**-adversary-proof; residual trust is the relay operator releasing on time, and in this demo operator = dev (ADR 0027). ## Done - [x] All boxes above checked; map #54 Destination satisfied (Section A closed as proven-in-practice — see its note); milestone "loot hosts loot" closed with a link to this doc. Retired 2026-07-18.
Hard embargo — no clock, escrow, or patched binary reads it early
What this proves: an embargoed change stays unreadable until the relay's own clock passes reveal_at. An adversarial holder with an advanced clock, direct .loot inspection, and a binary with every time gate removed all fail — then the read succeeds after release. The key bytes were never on the holder's machine.
PASS: advanced holder clock does not release the key (relay clock gates, not the holder's) PASS: the holder holds only ciphertext: the plaintext secret and key material are absent from .loot PASS: a client with the time gate removed still cannot read (no key bytes to bypass) PASS: the relay withholds the grant from its mailbox until its own clock passes reveal_at PASS: after reveal_at the relay delivers the key and the holder reads the embargoed change normally ALL CHECKS PASSED -- embargo is holder-adversary-proof against the live relay.
run output — docs/evidence/runs/attack-demo.txt
=== loot hard-embargo attack demo (#89, ADR 0027) === run started (utc): 2026-07-10 15:33:32Z relay: https://relay.millerbyte.com work dir: C:\Users\conno\AppData\Local\Temp\loot-attack-demo-1783697612 embargo window: 40s >>> building binaries (loot release + patched-client example) loot: C:\Users\conno\source\repos\loot\target\release\loot.exe patched-client: C:\Users\conno\source\repos\loot\target\debug\examples\patched-client.exe >>> originator: loot init --identity connor initialized empty loot repo at ., identity = connor public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBoaz1KpZgF2ImIiJeOnefVsqpTsrZltrAHvcB9elKnR connor@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=connor` >>> holder: loot init --identity holder initialized empty loot repo at ., identity = holder public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJpcRvRsiz7q56jtdVFHjhvP4lEG7PaKCBBr0A+0xWfm holder@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=holder` reveal_at (unix): 1783697653 (2026-07-10 15:34:13Z) >>> originator: seal + finalize the embargoed change working change 4ee0e4a5 — "embargoed change" .lootattributes public embargoed.md embargoed@1783697653 finalized working change; the next `status` starts a fresh one >>> originator: loot bundle (ciphertext only, no key) -> file wrote C:\Users\conno\AppData\Local\Temp\loot-attack-demo-1783697612\cipher.bundle (639 bytes) — copy it to a peer and `loot apply` >>> originator: peer add holder + grant --relay (timed deposit) registered peer 'holder' delivered sealed grant for 'holder' via relay https://relay.millerbyte.com embargoed.md → holder (sealed, signed, recorded in manifest) timed: the relay withholds the key until 1783697653 (hard embargo, ADR 0027) recipient runs `loot pull-grants` to receive it >>> holder: peer add connor + apply the ciphertext bundle registered peer 'connor' applied C:\Users\conno\AppData\Local\Temp\loot-attack-demo-1783697612\cipher.bundle as holder: .lootattributes converged embargoed.md converged run `loot surface` to materialize what you may see ================ PRE-REVEAL ATTACKS (must all fail) ================ >>> attack 1 (lying clock): LOOT_CLOCK >> reveal_at; loot grants + pull-grants no pending grants at https://relay.millerbyte.com no pending grants at https://relay.millerbyte.com .lootattributes public (1 sealed path(s) skipped — request a grant to access them) surfaced 4ee0e4a5 as holder PASS: advanced holder clock does not release the key (relay clock gates, not the holder's) >>> attack 2 (inspection): grep the holder's entire .loot for the plaintext secret scanned 14 file(s) under .loot the plaintext secret appears in NO file under .loot ciphertext objects held: 2 (the holder has the encrypted blob, not the key) escrow file: 6 bytes (empty header = no embargoed key staged) PASS: the holder holds only ciphertext: the plaintext secret and key material are absent from .loot >>> attack 3 (patched binary): read at now = u64::MAX with every gate removed patched client: all time gates removed (flush + read at now = u64::MAX) read FAILED even with every gate removed: not authorized to read Oid([219, 93, 109, 20, 10, 2, 131, 185, 13, 2, 155, 101, 243, 43, 107, 119, 130, 179, 40, 254, 198, 25, 250, 47, 62, 108, 139, 55, 115, 151, 84, 70]) nothing to bypass — the key bytes never arrived on this machine PASS: a client with the time gate removed still cannot read (no key bytes to bypass) >>> relay check: loot grants (relay clock still < reveal_at) no pending grants at https://relay.millerbyte.com PASS: the relay withholds the grant from its mailbox until its own clock passes reveal_at waiting 50s for the relay clock to pass reveal_at... ================ POST-REVEAL READ (must succeed) ================ >>> holder: loot pull-grants + surface (relay has now released the key) applied 1/1 grant(s) from https://relay.millerbyte.com run `loot surface` to materialize newly-accessible content .lootattributes public embargoed.md embargoed@1783697653 surfaced 4ee0e4a5 as holder PASS: after reveal_at the relay delivers the key and the holder reads the embargoed change normally ================ TRUST CLAIM (ADR 0027) ================ The claim is HOLDER-adversary-proof: no holder -- with an advanced clock, a patched binary, or direct disk inspection -- can read an embargoed change before reveal_at, because the key bytes are never on the holder's machine; they sit at the relay, ECIES-wrapped, until the RELAY's clock releases them. Residual trust: early release requires the RELAY OPERATOR -- a distinct role that holds only wrapped blobs it cannot read. In THIS demo the operator is the dev (operator = holder-of-the-VPS = the same person running loot), stated openly. Removing even that trust (drand timelock) is the recorded post-milestone hardening; the holder-adversary claim does not depend on it. ================ RESULT ================ ALL CHECKS PASSED -- embargo is holder-adversary-proof against the live relay. run finished (utc): 2026-07-10 15:34:24Z
Concurrent agents converge — no side silently dropped
What this proves: two agents editing the same repo reconcile through docks and the relay's fork-collapse. Disjoint work converges, a same-line edit surfaces as a machine-readable conflict (never a silent loss), and a path one side can't decrypt is relayed as ciphertext rather than merged.
PASS: dock-a's disjoint file converges into the harbor (= row) PASS: the concurrent same-line edit surfaces as a Conflict (C) -- not silently dropped PASS: after resolve, no conflicts remain (porcelain is empty) PASS: agent's apply pulls in dev's concurrent file (fork collapses -- dev's side not dropped) PASS: the restricted path agent can't open surfaces as RelayedUnmerged (R) -- carried, not merged ALL CHECKS PASSED -- concurrent convergence proven, both acts.
run output — docs/evidence/runs/concurrent-agents-demo.txt
=== loot concurrent-agents demo (wayfinder map #119) === run started (utc): 2026-07-10 23:45:55Z work dir: C:\Users\conno\AppData\Local\Temp\loot-concurrent-1783727155 >>> building loot (release) ############################################################ # ACT 1 -- local docks + harbor + conflict + buoy (ADR 0022) ############################################################ >>> init the repo (identity dev) and lay down a base change initialized empty loot repo at ., identity = dev public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIC0cI0PafymKKUFGsfX8QeK7anOU/NcFz+pGlhJ+wX5d dev@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=dev` >>> snapshot + finalize the base (both docks fork from here) working change 6667d10b — "base" shared.txt public finalized working change; the next `status` starts a fresh one >>> dock-a: fork, edit shared.txt + add a-only.txt on dock 'dock-a' — re-materialized its working tree here >>> dock-a: snapshot + finalize working change c153b37c — "dock-a work" a-only.txt public shared.txt public finalized working change; the next `status` starts a fresh one >>> dock-b: fork from base, edit shared.txt differently + add b-only.txt on dock 'main' — re-materialized its working tree here on dock 'dock-b' — re-materialized its working tree here >>> dock-b: snapshot + finalize working change 2d63b82c — "dock-b work" b-only.txt public shared.txt public finalized working change; the next `status` starts a fresh one >>> harbor: create the integrator dock (forks from base, no work yet) on dock 'main' — re-materialized its working tree here on dock 'harbor' — re-materialized its working tree here >>> harbor <- dock-a: loot dock merge dock-a --porcelain = a-only.txt - - M shared.txt - - PASS: dock-a's disjoint file converges into the harbor (= row) >>> harbor <- dock-b: loot dock merge dock-b --porcelain (CONCURRENT same-line edit) = b-only.txt - - C shared.txt 7e6f95360315a03e45d18911891cca701950c3eae271334412d531132fcd5a0e 0f43d8dbbb933784441623442582148f16706f36bfeb9f525ba276c3b38d3b41 PASS: the concurrent same-line edit surfaces as a Conflict (C) -- not silently dropped PASS: dock-b's disjoint file still converges (= row) alongside the conflict >>> loot conflicts --porcelain (the agent reads what needs resolving) C shared.txt 7e6f95360315a03e45d18911891cca701950c3eae271334412d531132fcd5a0e 0f43d8dbbb933784441623442582148f16706f36bfeb9f525ba276c3b38d3b41 PASS: the conflict is enumerable in porcelain for an agent to act on >>> loot resolve shared.txt <- reconciled content (keeps both sides' intent) resolved shared.txt (new oid: 58dc0944) all conflicts resolved — dock tip advanced >>> loot conflicts --porcelain (expect empty -- resolved) PASS: after resolve, no conflicts remain (porcelain is empty) PASS: the integrated harbor tree carries BOTH docks' disjoint work + the resolved file (no side dropped) >>> finalize the integration as a change finalized working change; the next `status` starts a fresh one >>> loot log (find the finalized integration change) 4 heads — diverged; run `loot apply` to converge head 1 — 29943b7b 29943b7b (working change) [logged by 2d1c2343…] head 2 — 7c724bb4 7c724bb4 (working change) [logged by 2d1c2343…] head 3 — 867694a6 867694a6 (working change) [logged by 2d1c2343…] head 4 — bcecfa79 bcecfa79 resolve conflict at shared.txt [logged by 2d1c2343…] efb0e0e2 merge dock 'dock-b' into 'harbor' [logged by 2d1c2343…] c0cc4786 merge dock 'dock-a' into 'harbor' [logged by 2d1c2343…] shared history c153b37c dock-a work [logged by 2d1c2343…] 2d63b82c dock-b work [logged by 2d1c2343…] 6667d10b base [logged by 2d1c2343…] >>> loot attest 29943b7b base (mark it a navigational landmark) attested 29943b7b as "base" >>> loot buoy base (resolve the landmark -- computed, not a mutable ref) buoy (base): 29943b7b — attested by 2d1c2343… PASS: a buoy resolves the integration change as the 'base' landmark ############################################################ # ACT 2 -- concurrent convergence via the relay (ADR 0001/0026) ############################################################ >>> starting local relay: loot serve --dir <tmp> --addr 127.0.0.1:47463 relay is up. >>> dev: init + declare secret.txt restricted initialized empty loot repo at ., identity = dev public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICJqwNh/KM4ggsTKViHna8/9Mby9ZPQImZdnygUW9tGU dev@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=dev` >>> dev: snapshot + finalize + push the initial changes remote 'origin' → http://127.0.0.1:47463 working change dfab285c — "public notes + restricted secret" .lootattributes public notes.txt public secret.txt restricted=dev finalized working change; the next `status` starts a fresh one pushed 3 new object(s) to http://127.0.0.1:47463 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: clone the relay as a DISTINCT identity 'agent' initialized empty loot repo at C:\Users\conno\AppData\Local\Temp\loot-concurrent-1783727155\agent, identity = agent public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKf2hxRhtC1uiFLjY1lDsgfhqoP1dArVWqx95kMNH7xY agent@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=agent` pulled 3 change(s) from http://127.0.0.1:47463 cloned http://127.0.0.1:47463 → C:\Users\conno\AppData\Local\Temp\loot-concurrent-1783727155\agent run `loot status` to see the working tree PASS: on clone, agent holds ciphertext but not the restricted path (no key) >>> dev (concurrent): add dev-feature.txt, touch secret.txt, push finalized working change; the next `status` starts a fresh one >>> dev: snapshot + finalize + push (tip 1) working change 6fed0a93 — "dev feature + secret edit" .lootattributes public dev-feature.txt public notes.txt public secret.txt restricted=dev finalized working change; the next `status` starts a fresh one pushed 2 new object(s) to http://127.0.0.1:47463 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent (concurrent, before pulling dev): add agent-feature.txt, push registered peer 'dev' >>> agent: snapshot + finalize + push (tip 2 -> relay DAG now forked) working change e84bdd21 — "agent feature" .lootattributes public agent-feature.txt public notes.txt public finalized working change; the next `status` starts a fresh one pushed 1 new object(s) to http://127.0.0.1:47463 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: loot pull + apply, read the collapse in porcelain = .lootattributes - - = dev-feature.txt - - = notes.txt - - R secret.txt - - PASS: agent's apply pulls in dev's concurrent file (fork collapses -- dev's side not dropped) PASS: the restricted path agent can't open surfaces as RelayedUnmerged (R) -- carried, not merged >>> agent: loot surface (materialize what agent may read) .lootattributes public agent-feature.txt public dev-feature.txt public notes.txt public (1 sealed path(s) skipped — request a grant to access them) surfaced fc6ef0d2 as agent PASS: after convergence agent's tree carries BOTH concurrent features -- no side dropped PASS: the restricted content stays sealed to agent (relay + agent hold only ciphertext) ================ RESULT ================ Two acts, one thesis: concurrent edits CONVERGE with no side dropped. Act 1 (local docks): two docks integrate into the harbor; a genuine same-line conflict surfaces (C), resolves, and a buoy landmarks the integration -- every step driven by porcelain verdicts. Act 2 (relay leg): two DISTINCT identities push concurrently, the relay DAG forks, and a pull+apply collapses it -- public work converges while a restricted path relays (R) as ciphertext the non-keyholder cannot read. The per-path merger/relay split, under concurrency (ADR 0001). Honesty (ADR 0026): one machine, one OS user. 'agent cannot read the restricted path' is key custody -- the key never reached agent's keyring or the keyless relay. Docks are the same-identity concurrency unit; the relay leg is the cross-identity one. ALL CHECKS PASSED -- concurrent convergence proven, both acts. run finished (utc): 2026-07-10 23:45:56Z
evidence doc — docs/evidence/concurrent-agents.md
# Evidence: concurrent agents converge The concrete, checkable proof for the concurrent-agents epic (wayfinder map #119). The claim: > **Two agents editing concurrently converge with no side silently dropped** — > locally through docks + the harbor, and remotely through the relay's > fork-collapse — and the whole reconciliation loop is **agent-drivable** via > porcelain verdicts, with buoys marking integration landmarks and loot's > per-path *merger vs. relay* split (ADR 0001) honored under concurrency. Like the rest of `docs/evidence/`, the proof is a **re-runnable script** whose captured output is committed beside it: script [`scripts/concurrent-agents-demo.ps1`](scripts/concurrent-agents-demo.ps1), output [`runs/concurrent-agents-demo.txt`](runs/concurrent-agents-demo.txt) (run 2026-07-10, **all checks passed**). It runs in two acts. This milestone was **proof + landing**, not construction: CA1–CA4 (docks, `dock merge`+harbor, porcelain/JSON verdicts, `loot buoy`) were already on `main`. Running the proof is what earned the last fixes — see *What the run surfaced* below. ## Act 1 — local docks (same identity, one object store; ADR 0022) Two docks fork off a base and edit concurrently, then integrate into a `harbor` dock. Every reconciliation step is read back in **porcelain** — the agent's driver. - [x] **Two docks fork from a common base and edit concurrently** — `dock-a` and `dock-b` each add a disjoint file and both edit the same single-line `shared.txt` differently (run lines 22–39). - [x] **`loot dock merge --porcelain` integrates into the harbor** — merging `dock-a` converges/merges cleanly (`=`/`M` rows, line 46–47). - [x] **A genuine concurrent conflict surfaces — no side dropped** — merging `dock-b` yields `C shared.txt <base> <incoming>` alongside `= b-only.txt` (lines 51–52); `loot conflicts --porcelain` re-enumerates it for an agent to act on (line 57). - [x] **`loot resolve` clears it and the integrated tree carries everything** — after resolve, `conflicts --porcelain` is empty and all three paths (`shared.txt`, `a-only.txt`, `b-only.txt`) are present (lines 61–66). - [x] **A buoy landmarks the integration** — `loot attest <merge> base` then `loot buoy base` resolves the integration change, a *computed* landmark over the attestation lane, not a mutable ref (lines 88–93; ADR 0025). ## Act 2 — relay leg (two distinct identities; ADR 0001 / 0026) A hermetic, local `loot serve` relay (mutating, so off the shared VPS DAG). `dev` seals a restricted path and publishes; `agent` clones. Both then edit **concurrently** and push — the relay's append-only DAG forks — and `agent`'s pull collapses it. - [x] **On clone, agent holds ciphertext but not the restricted path** — `secret.txt` is absent from its surface, no key (line 126). - [x] **Two identities push concurrently → the relay DAG forks** — `dev` pushes `dev-feature.txt` (+ a `secret.txt` edit) and `agent` pushes `agent-feature.txt`, each a separate relay tip (lines 128–151). - [x] **`loot pull --porcelain` collapses the fork — public work converges** — agent's pull reports `= dev-feature.txt` and merges dev's side in; after `surface`, agent's tree carries **both** concurrent features (lines 154–168). No side dropped. - [x] **The restricted path relays, not merges** — the path whose key agent does not hold surfaces as `R secret.txt` (RelayedUnmerged) and stays sealed: agent and the relay hold only ciphertext (lines 157, 169). This is the ADR 0001 per-path *merger vs. relay* split, under concurrency. - [x] **Honesty statement in the captured output** — one machine, one OS user; "agent cannot read the restricted path" is key custody: the key never reached agent's keyring or the keyless relay (lines 182–185, ADR 0026). ## What the run surfaced (and fixed) The read-only acceptance audit (#121) could not catch these; running the proof did: - **#128 — `pull`/`apply` never collapsed a concurrent two-writer fork.** Engine `apply_sync` ingested a peer's divergent tip as a *sibling head* and classified outcomes, but never merged tips — leaving the keyholder on `2 heads — diverged` with a working tree showing only its own side. Fixed with `Workspace::converge_heads` (the peer-side analogue of `merge_dock`), called by `pull` after ingest; `pull` also gained `--porcelain`/`--json`. Without this, Act 2 was not achievable at all. Regression test: `converge_heads_collapses_a_two_writer_fork_no_side_dropped`. - **#126 — `loot dock merge` printed prose, not porcelain.** Routed through the CA3 verdict serializer so Act 1's central verb is agent-drivable. ## Done - [x] Both acts pass in a committed, re-runnable script ([run](runs/concurrent-agents-demo.txt), 2026-07-10) — the epic's claim holds end to end (same-identity docks **and** cross-identity relay). - [ ] Map #119 Destination satisfied; CONTEXT.md / ADRs reconciled to shipped reality (#124); CA2/CA3/CA4 (#50/#51/#52) and the buoys spec map (#71) closed under epic-landing (#125), linked to this doc.
Grant then maroon — access is handed out and cut off deliberately
What this proves: a restricted path starts unreadable to a peer; a sealed, signed grant lets them read it; a hard maroon re-seals it so their next pull carries a key they no longer hold. Sharing is a key handoff, and revocation is real.
PASS: before any grant, the agent cannot read the restricted path (secret.txt absent) delivered sealed grant for 'agent' via relay PASS: after the sealed grant, the agent files the key and reads the restricted content hard-marooned agent from secret.txt (new oid: 36683014) PASS: after the hard maroon, the agent's pull carries a seal it cannot open (no key)
run output — docs/evidence/runs/grant-maroon-demo.txt
=== loot grant / maroon lifecycle demo (section B, ADR 0008/0009/0015) === run started (utc): 2026-07-10 15:59:12Z relay: http://127.0.0.1:47452 (local loot serve -- hermetic; mutating demo) work dir: C:\Users\conno\AppData\Local\Temp\loot-grant-maroon-1783699152 >>> building loot (release) >>> starting local relay: loot serve --dir <tmp> --addr 127.0.0.1:47452 relay is up. >>> dev: loot init --identity dev initialized empty loot repo at ., identity = dev public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMn/Wp5WhJV/sE/7ksjfPYSReO3vvhHbVxkCv47hwefe dev@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=dev` >>> dev: seal + finalize + push the restricted change remote 'origin' → http://127.0.0.1:47452 working change 46fc4936 — "add restricted secret" .lootattributes public secret.txt restricted=dev finalized working change; the next `status` starts a fresh one pushed 2 new object(s) to http://127.0.0.1:47452 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: clone the relay as identity 'agent' initialized empty loot repo at C:\Users\conno\AppData\Local\Temp\loot-grant-maroon-1783699152\agent, identity = agent public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMzKPjUUgJVNk1hsGccqDfdDVdb/053urMs75gSmwauE agent@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=agent` pulled 2 change(s) from http://127.0.0.1:47452 cloned http://127.0.0.1:47452 → C:\Users\conno\AppData\Local\Temp\loot-grant-maroon-1783699152\agent run `loot status` to see the working tree PASS: before any grant, the agent cannot read the restricted path (secret.txt absent) >>> dev: peer add agent + grant --relay secret.txt agent registered peer 'agent' delivered sealed grant for 'agent' via relay http://127.0.0.1:47452 secret.txt → agent (sealed, signed, recorded in manifest) recipient runs `loot pull-grants` to receive it >>> agent: peer add dev + pull-grants + surface registered peer 'dev' applied 1/1 grant(s) from http://127.0.0.1:47452 run `loot surface` to materialize newly-accessible content .lootattributes public secret.txt restricted=dev surfaced 46fc4936 as agent PASS: after the sealed grant, the agent files the key and reads the restricted content >>> dev: loot maroon --hard secret.txt agent (re-seal excluding the agent) + push hard-marooned agent from secret.txt (new oid: 36683014) purge event recorded — cooperating peers will remove agent's old key on next bundle apply agent no longer has future access (no remaining grantees — content is now accessible only to you) pushed 1 new object(s) to http://127.0.0.1:47452 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: drop the old copy, then loot pull + surface (receives the re-seal + purge) pulled from http://127.0.0.1:47452 as agent: .lootattributes converged secret.txt relayed (sealed — you lack the key) run `loot surface` to materialize what you may see .lootattributes public (1 sealed path(s) skipped — request a grant to access them) surfaced f7da8ba3 as agent PASS: after the hard maroon, the agent's pull carries a seal it cannot open (loot cannot restore secret.txt -- no key) >>> dev: loot manifest (grant audit trail, grantor/grantee as pubkeys) granted_at grantee grantor oid ------------------------------------------------------------------------ 1783699153 agent c9ff5a9e… 129b7c8c PASS: the Manifest records the grant to the agent (auditable key-handoff trail) ================ RESULT ================ Access to secret.txt was granted to the agent, exercised, then revoked -- each step per-content, propagated over a keyless relay, and recorded in the Manifest. Permissions are a property of the content and the grant graph, not of the repository. Honesty (ADR 0026): one machine under one OS user. 'The agent cannot read after maroon' means key custody PLUS the agent harness's file sandbox -- an honest-participant posture. The re-seal denies the NEW content to the marooned key; the hard-maroon purge additionally drops the old key on cooperating peers. Forward secrecy for already-read bytes is out of scope (the agent may have copied what it already decrypted -- ADR 0009). ALL CHECKS PASSED -- grant, read, maroon, and audit all behaved. run finished (utc): 2026-07-10 15:59:13Z
Divergence from ordinary work — the ! marker, abandon, and undo
What this proves: two identities amending the same change produce two live versions under one durable handle — rendered with a ! marker, kept flat (no phantom merge), collapsed by loot abandon, and restored by loot undo. Nothing is ever destroyed.
mzlxpytq! 57a84e20 add feat 7bb5b8c4… mzlxpytq! 2f370248 add feat agent PASS: DIVERGENCE: log renders the ! marker on the divergent change_id PASS: DIVERGENCE STAYS FLAT (#203): no per-path conflict -- converge minted no merge PASS: DIVERGENCE: two live versions listed under one durable handle (57a84e20, 2f370248) abandoned version 57a84e20 — its change id keeps the remaining live version(s)
run output — docs/evidence/runs/amend-divergence-demo.txt
=== loot amend-divergence demo (wayfinder map #169) === run started (utc): 2026-07-12 06:25:30Z work dir: C:\Users\conno\AppData\Local\Temp\loot-amend-1783837530 >>> building loot (release) >>> starting local relay: loot serve --dir <tmp> --addr 127.0.0.1:47521 relay is up. ############################################################ # ACT 1 -- CONTROL: solo amend => clean supersession (ADR 0032) ############################################################ >>> dev: init, write doc.txt = v1, finalize + push initialized empty loot repo at ., identity = dev public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHu1uMSWeY/yEHLGUcDtF023Ye07qHzBRrDxPOItobN8 dev@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=dev` remote 'origin' → http://127.0.0.1:47521 >>> dev: loot new -m 'write doc' (finalize the base) + push finalized working change 7de50c42; started fresh change oryovzky pushed 1 new object(s) to http://127.0.0.1:47521 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) [control change_id = knvkmrlm] >>> agent: clone the relay as a DISTINCT identity 'agent' initialized empty loot repo at C:\Users\conno\AppData\Local\Temp\loot-amend-1783837530\agent, identity = agent public key: ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEeuznAR6lVeQcU1qzLsAp1kmBApjYOQK0s9RW/U/2ZN agent@loot tip: share your public key with peers via `loot whoami` tip: declare per-file privacy in .lootattributes, e.g. `.env restricted=agent` pulled 1 change(s) from http://127.0.0.1:47521 cloned http://127.0.0.1:47521 → C:\Users\conno\AppData\Local\Temp\loot-amend-1783837530\agent run `loot status` to see the working tree >>> agent: surface + read doc.txt (has dev's v1) doc.txt public surfaced 7de50c42 as agent PASS: agent clones dev's base change (doc.txt = v1) >>> dev: loot edit knvkmrlm (reopen the landed change) editing change knvkmrlm — reopened version 7de50c42 as the working change finalize (`loot new`) to supersede 7de50c42 with your amended version; `loot undo` walks this back >>> dev: finalize the amend (loot new) + push finalized working change cbadfe5c; started fresh change mzlxpytq pushed 1 new object(s) to http://127.0.0.1:47521 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: loot pull (expect clean supersession, no divergence) pulled from http://127.0.0.1:47521 as agent: doc.txt merged converged onto one line; run `loot surface` to materialize what you may see >>> agent: loot surface doc.txt public surfaced cbadfe5c as agent >>> agent: loot log (the control -- no bang marker on the change) change version message vis author knvkmrlm cbadfe5c write doc 7bb5b8c4… usmnmqpk — (working change, empty) agent PASS: CONTROL: no divergence marker (!) after a solo amend (clean supersession) PASS: CONTROL: log does not report a diverged fork PASS: CONTROL: agent's doc.txt is dev's amended version (replacement) PASS: CONTROL: no content-merge of the old and new lines (converge dropped the superseded head) ############################################################ # ACT 2 -- DIVERGENCE from concurrent amends (! / abandon / undo) ############################################################ >>> dev: write feat.txt = base, finalize + push finalized working change 3f95ff7d; started fresh change zuzrousw pushed 1 new object(s) to http://127.0.0.1:47521 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) [divergent change_id = mzlxpytq] >>> agent: pull the base change (both peers now share it, single version) pulled from http://127.0.0.1:47521 as agent: doc.txt converged feat.txt converged converged onto one line; run `loot surface` to materialize what you may see doc.txt public feat.txt public surfaced 3f95ff7d as agent PASS: agent shares the base change (feat.txt present, one version) >>> dev: loot edit mzlxpytq, feat.txt = dev's take, finalize + push editing change mzlxpytq — reopened version 3f95ff7d as the working change finalize (`loot new`) to supersede 3f95ff7d with your amended version; `loot undo` walks this back >>> dev: finalize dev's amend + push (relay tip 1) finalized working change 57a84e20; started fresh change yxkrwnln pushed 1 new object(s) to http://127.0.0.1:47521 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: loot edit mzlxpytq (its own line, from the shared base) editing change mzlxpytq — reopened version 3f95ff7d as the working change finalize (`loot new`) to supersede 3f95ff7d with your amended version; `loot undo` walks this back >>> agent: finalize agent's amend + push (relay tip 2 -> two versions of one handle) finalized working change 2f370248; started fresh change nrqrlspl pushed 1 new object(s) to http://127.0.0.1:47521 in 1 batch(es) — resumable (re-run to continue if interrupted) this published your sealed content to the relay (it still cannot read it) >>> agent: loot pull (dev's amend lands next to agent's -> DIVERGENCE) pulled from http://127.0.0.1:47521 as agent: doc.txt converged converged onto one line; run `loot surface` to materialize what you may see >>> agent: loot log (the ! divergence marker, flat listing) change version message vis author mzlxpytq! 57a84e20 add feat 7bb5b8c4… mzlxpytq! 2f370248 add feat agent knvkmrlm cbadfe5c write doc 7bb5b8c4… nrqrlspl — (working change, empty) agent >>> agent: loot status (agrees: the working change's handle is divergent) working change nrqrlspl is empty (no changes since the last `new`) >>> agent: loot conflicts (EMPTY -- converge minted no merge, so no per-path conflict) no conflicts PASS: DIVERGENCE: log renders the ! marker on the divergent change_id PASS: DIVERGENCE: it is a flat divergent listing, not a 'run apply' fork PASS: DIVERGENCE STAYS FLAT (#203): no per-path conflict -- converge minted no merge of the co-versions PASS: DIVERGENCE STAYS FLAT (#203): the working tree is clean on OURS (agent's own amend) PASS: DIVERGENCE: two live versions listed under one durable handle (57a84e20, 2f370248) >>> agent: loot abandon 57a84e20 (collapse the divergence -- keep agent's side) abandoned version 57a84e20 — its change id keeps the remaining live version(s) nothing was deleted; `loot undo` brings it back (see `loot op log`) >>> agent: loot log (collapsed -- one live version, no bang) change version message vis author mzlxpytq 2f370248 add feat agent knvkmrlm cbadfe5c write doc 7bb5b8c4… nrqrlspl — (working change, empty) agent PASS: ABANDON: the ! marker is gone -- divergence collapsed to one live version PASS: ABANDON: the change_id survives with its remaining live version >>> agent: loot conflicts (still empty -- abandon left a clean tree, nothing to resolve) no conflicts PASS: ABANDON IS THE WHOLE SETTLE (#203): no standing per-path conflict after the collapse PASS: ABANDON IS THE WHOLE SETTLE (#203): the survivor's tree stands (agent's take, clean) >>> agent: loot undo (walk the abandon back) undid op 8 (abandon) — now at op 7, head 2f370248, 57a84e20 >>> agent: loot log (divergence restored -- the bang is back) change version message vis author mzlxpytq! 57a84e20 add feat 7bb5b8c4… mzlxpytq! 2f370248 add feat agent knvkmrlm cbadfe5c write doc 7bb5b8c4… nrqrlspl — (working change, empty) agent PASS: UNDO: the divergence is restored -- the ! marker returns (nothing was destroyed) ================ RESULT ================ Divergence arises from ORDINARY WORK, no white-box construction: Act 1 (control): a solo 'loot edit' amend travels the relay as a clean supersession -- the peer sees a replacement, no bang marker, no content-merge (converge drops the superseded head). ADR 0032's supersession-travels property. Act 2 (divergence): two identities each 'loot edit' the SAME change_id and finalize different amends; one pull puts both live versions in one graph -- FLAT (#203): no converge merge, no per-path conflict, tree clean on ours; 'loot log'/'status' render the ! marker; 'loot abandon' is the whole settle; 'loot undo' restores it. Divergence is cross-STORE (two docks in one store cannot produce it, #171). Honesty (ADR 0026): one machine, one OS user; two keyring-separated identities cooperating over a hermetic local relay. ALL CHECKS PASSED -- divergence from ordinary work proven, both acts. run finished (utc): 2026-07-12 06:25:32Z
evidence doc — docs/evidence/amend-divergence.md
# Evidence: divergence arises from ordinary work The concrete, checkable proof for the amend model (wayfinder map [#169](https://github.com/Connor-Miller/loot/issues/169), ADR 0032). The claim: > **A divergent change can arise from ordinary concurrent work, not just a test > fixture.** Two peers each `loot edit` the *same* durable change over the relay, > finalize different amends, and sync — one graph then holds two live versions of > one handle. `loot log`/`status` render the `!` marker, `loot abandon` collapses > it, and `loot undo` restores it. And the control holds: a *solo* amend travels > as a clean supersession (no `!`, no content-merge), which is exactly what the > signed `predecessors` claim (ADR 0032) buys. Like the rest of `docs/evidence/`, the proof is a **re-runnable script** whose captured output is committed beside it: script [`scripts/amend-divergence-demo.ps1`](scripts/amend-divergence-demo.ps1), output [`runs/amend-divergence-demo.txt`](runs/amend-divergence-demo.txt) (run 2026-07-12, **all checks passed**). It runs in two acts over a hermetic, local `loot serve` relay — Act 2 mutates history (push), so it stays off the shared VPS DAG. This is the last slice of map #169: the keystone (ADR 0032, `fa0cdc2`) and the build (`loot edit`, PR #196, `ac92bc1c`) already landed — this run is the **proof** that the shipped verb produces divergence from real concurrent writers, **no white-box construction** (no `record_carrying` test fixture). ## Why two identities, not two docks Divergence is **cross-store** (build finding [#171](https://github.com/Connor-Miller/loot/issues/171)). Two docks over one shared store *cannot* self-diverge: the first dock's reopen is visible through the shared blob, so the second `edit` refuses or chains onto the finalized amend. Two live versions of one `change_id` arise only when two independent *stores* each amend it and then sync. So the proof uses two keyring-separated identities (`dev`, `agent`) over the relay (ADR 0026), not two docks. ## Act 1 — control: a solo amend is a clean supersession (ADR 0032) `dev` finalizes a base change and pushes; `agent` clones it. `dev` then `loot edit`s that same change, amends the file, finalizes, pushes — and `agent`'s pull sees the amended version **replace** the original. - [x] **`agent` clones `dev`'s base change** — `doc.txt = v1` on clone (run lines 36–39). - [x] **`dev` reopens the landed change with `loot edit`** — the durable handle `knvkmrlm` is carried; the working change supersedes version `7de50c42` (lines 41–43), finalized + pushed (45–48). - [x] **`agent`'s pull is a clean supersession — no `!`, no content-merge** — after pull + surface, `loot log` shows the single change `knvkmrlm` at the amended version `cbadfe5c`, no divergence marker, no "diverged" fork, and `doc.txt` is `dev`'s amended line (not a merge of old + new): converge dropped the superseded head (lines 50–66). This is ADR 0032's supersession-travels property — a solo amend is invisible as divergence. ## Act 2 — divergence: two identities amend the same change (`!` / abandon / undo) Both peers share a base change `mzlxpytq`. Each `loot edit`s it and finalizes a **different** amend on its own store — two live versions of one handle — then pushes. `agent` pulls `dev`'s amend, so one graph holds both. - [x] **Both peers share the base change** — `agent` pulls it, `feat.txt` present, single version (lines 78–86). - [x] **Concurrent amends → two versions of one handle** — `dev` amends `feat.txt` to *dev's take* and pushes (relay tip 1, lines 88–96); `agent`, from the same base and *before* pulling `dev`'s amend, amends to *agent's take* and pushes (relay tip 2, lines 98–104). - [x] **One pull puts both live versions in one graph → the `!` marker, FLAT** — `agent`'s pull ingests `dev`'s amend; `loot log` renders the durable handle `mzlxpytq!` twice, once per live version (`57a84e20`, `2f370248`), as a **flat listing** — not a "heads — diverged" fork (whose hint names `loot pull`'s converge, #1145) — and `loot status` agrees the handle is divergent (lines 106–127). Converge minted **no merge** ([#203](https://github.com/Connor-Miller/loot/issues/203)): `loot conflicts` reports nothing (lines 121–122) and the working tree is clean on `agent`'s own side (line 126). - [x] **`loot abandon <version-id>` is the whole settle** — abandoning `dev`'s version leaves the handle with `agent`'s single live version; the `!` is gone, the `change_id` survives, `loot conflicts` is still empty, and the survivor's tree stands clean (lines 129–144). Nothing is deleted. - [x] **`loot undo` restores it — nothing was destroyed** — one undo walks the abandon back and the `!` returns with both versions (lines 146–155). ## What the run surfaced The first run of this proof (2026-07-12, pre-#203) surfaced one behaviour worth recording — since **resolved**: - **`abandon` collapsed the handle-level divergence, but not the tree-level conflict `converge` created.** Because both amends edited the *same line*, the pull's `converge_heads` folded the two divergent versions under one signed merge head *and* raised a per-**path** content conflict on `feat.txt` that survived `abandon` — the one two-writer event represented twice, by two orthogonal mechanisms (per-`change_id` divergence, ADR 0032; per-path conflict, ADR 0001), settled by two separate steps. That was the "converge content-combination wart" flagged in map #169's Fog. **Resolved by [#198](https://github.com/Connor-Miller/loot/issues/198) → [#203](https://github.com/Connor-Miller/loot/issues/203)** (amending ADR 0032): converge merges only genuinely independent heads — two live versions of one `change_id` stay flat as live heads, no merge is minted, no per-path conflict exists, and `loot abandon` is the whole settle. The committed run above is the post-#203 rerun proving it. The signed, travelling resolution (one amend naming *both* live versions as predecessors) remains the deferred [multi-predecessor path](https://github.com/Connor-Miller/loot/issues/169). ## Done - [x] Both acts pass in a committed, re-runnable script ([run](runs/amend-divergence-demo.txt), rerun 2026-07-12 post-#203) — divergence arises from ordinary concurrent work (control + real two-identity amend), renders with `!` **flat** (no converge merge, no per-path conflict), collapses via `abandon` (the whole settle), restores via `undo`, with no white-box construction. Resolves map #169's proof ticket [#172](https://github.com/Connor-Miller/loot/issues/172); the divergence act doubles as the live proof for [#203](https://github.com/Connor-Miller/loot/issues/203).
A working day driven loot-first — git main is a projection
What this proves: loot leads its own development. This very evidence file originated in loot's working tree, was reviewed on GitHub as projected unsigned WIP, and was landed by loot new — with git main projected downstream. No git commit created it.
The destination proof for wayfinder map #148 ("flip the agentic workflow loot-first, git downstream"). This document IS the day's unit of work: it originated in loot's working tree, was reviewed on GitHub as a PR built from projected unfinalized loot WIP, and landed by `loot new` — with git main projected downstream. If you are reading it on git main, the workflow worked: no git commit ever created this file.
evidence doc — docs/evidence/loot-first.md
# Evidence: a working day driven loot-first The destination proof for wayfinder map #148 ("flip the agentic workflow loot-first, git downstream"), ticket #155. This document **is** the day's unit of work: it originated in loot's working tree, was reviewed on GitHub as a PR built from **projected unfinalized loot WIP**, and landed by `loot new` — with git `main` projected downstream. If you are reading it on git `main`, the workflow worked: no git commit ever created this file. ## What "loot-first" means here (docs/agents/workflow.md) - The working change accrues in loot (auto-snapshot); `loot ferry --with-wip` projects it to a sealed-free `review/<dock>` branch as **provisional** commits — `Loot-Provisional`, no `Loot-Signature` (the missing signature is the machine-checkable "not finalized"), still SSHSIG-signed for integrity. - The PR is a review *view*. Approval → `loot new` (finalize + sign, git-quiet) → the next ferry projects the one signed commit onto `main` and reaps the provisional lane. - The orchestrator (`tools/loot-first.ps1`) publishes by **single-ref push with an inline URL** — the private mirror never gains a remote — and points the PR head at the landed sha so GitHub marks the PR **Merged by reachability**: no merge button, no merge commit, loot is the merger. ## The run (2026-07-11) 1. **Catch-up (the #151 residual, working as designed).** GitHub `main` held 9 commits loot had not ingested (the jj-ergonomics build and this milestone's own tooling — the last git-first changes there will ever have to be). One plain `loot ferry` ingested all 9 with zero conflicts; `loot push` published the catch-up — after redeploying the relay to format v6, the first live v6 push (43 objects). 2. **Round 1 caught a real leak — the run's central finding.** The first `review` pass (PR #161) put `docs/pitch/` into a **public** PR diff. The projection filtered on *readability*, and the dev's own mirror identity can read restricted content (ADR 0028's full-readable-tree contract) — so "sealed-free by construction" was false exactly for the identity doing the publishing, and the same flaw would have hit `main` itself on the first land. Contained same-hour (PR closed, branch deleted; the dangling diff on GitHub's side is accepted residual, logged on ticket #155). **Fix, same day:** publication is now a **public-delta** — the git parent tree plus the change's delta restricted to `Visibility::Public` — so sealed content never publishes *even when readable*, and published history is git-shaped for free (mirror-only paths like `.scratch/` no longer spray the diff). Shipped as "Publication is a public-delta, never the readable tree" (PR #163, `7ea6ee0`), with tests pinning the exact leak class. > **Correction (2026-08-08, #645).** This read "loot-only paths like > `.scratch/`", which inverts the fact. `.scratch/` is a **mirror-only > path** — git carries it, loot has no record of it — and that is precisely > why the readable-tree projection sprayed: every path git held and loot > did not appeared as a *deletion* in every projected commit. The mechanism > reported above was right; the label was backwards. `Visibility::Public` > is left as written — correct in July, renamed to `Internal` by ADR 0041. 3. **Take two caught a second (small) one.** The retried `review` (PR #164) was sealed-clean but showed mode-only hunks: the public-delta rebuild had re-inserted every blob as `100644`, stripping the exec bit from untouched scripts. Fixed same-hour ("Publication preserves git filemodes", PR #165, `fb7b8c8`) — modes ride through from the git parent, since loot deliberately does not track them. 4. **Round 1, take three.** With both fixes live, `review` projected a clean one-file diff and opened the fresh PR. 5. **Round 2.** This section updated with the live PR number — the revision **appended** a second provisional commit to the same durable change lane, so the reviewer sees "changes since your last review" (#150). The run is **PR #166**, review lane `f0acc001…` (the durable change id), round-1 version `d86bdc1b` — this very sentence is what round 2 changed. 6. **Land — which falsified one more design guess.** `loot-first.ps1 land` finalized (`loot new`, git-quiet), ferried (the signed projection `3851fef7` became `main`, the lane reaped), fast-forward-pushed GitHub `main`, collapsed the PR head onto the landed sha, and pushed the relay: `landed: change_id=f0acc001… main=3851fef7 pr=#166`. But #150's "reachability-merge" prediction was wrong: GitHub **auto-closes** a PR whose head is force-pushed to an already-landed commit (zero diff) — it never flips to purple Merged. The auto-close *is* the landing signal; the tool now attaches the pointer comment (change id → landed sha) as the audit trail, and this very amendment landed as the run's second loot-first lane. ## Friction found live (dogfood data, not failure) - **The leak above is the headline**: a live run falsified a design assumption two design reviews and a green test suite had all blessed — the unit tests only sealed content *from* the identity, never *to* it. Same lesson as the concurrent-agents epic: only a real run catches the gap between "reviewed" and "true." - **Self-approval is impossible on GitHub** — you cannot approve your own PR, so the uniform "every change lands through a PR" rule (#152) needed a self-authored fast path in `land`: author == viewer and no `CHANGES_REQUESTED` counts as the approval signal. A second identity (an agent reviewer, or the dev reviewing an agent) uses the real `reviewDecision == APPROVED` gate. - **Format-version coupling**: the first loot-first day collided with the FORMAT_MAJOR 5→6 bump — the v6 client could not push until the relay was redeployed (idempotent `setup:loot`, one command). Worth remembering that a format bump means "redeploy the relay the same day." - **Single-lane v1**: the mirror's `main` tracks the home dock, so this run drove the lane in `home` directly. A named-dock lane lands through the harbor (`loot dock merge`) before projection — the orchestrator does not automate that hop yet; it is the known follow-up. - **`pwsh` vs `powershell`**: the tooling docs said `pwsh`; this machine has only Windows PowerShell 5.1. The scripts run fine under 5.1 (by design, ASCII-only) — invoke as `powershell -File` or `& .\tools\loot-first.ps1`. - **GitHub "Merged" is unreachable for rewritten-oid landings** — the falsified #150 guess above. Closed-by-collapse + pointer comment is the honest mechanism; a purple badge would require GitHub's own merge machinery, which loot rejects by design (git never merges). - **The landed commit subject was `wip`** — the working change's default message became `main`'s commit subject. Run `loot describe -m` before `land` (or pass a message through the tool) so the landed subject reads like history. Cosmetic, but worth folding into the ritual. ## Findings from the second loot-first day (2026-07-11, the pre-land-gate lane) The lane that landed this section added the missing **pre-land gate** to `loot-first.ps1 land` (`cargo test` before finalize — review approves *projected WIP*, so nothing had yet proven the commit about to land builds; `-SkipTests` is the break-glass for non-code lands). Driving it surfaced: - **`status`'s hint is a finalize foot-gun on dirty work.** With edits on disk and no working change, `loot status` says "no working change (run `loot new` to start one)" — but `new` is capture-*then-finalize*: following the hint signed the dirty tree in one stroke (`0729287d`), skipping the review lane entirely. The first verb on dirty work should be `describe -m` (capture without finalize); the hint should say so. The accidental finalize rode to `main` break-glass beneath this lane's reviewed commit — content correct, subject the default, unreviewed. **Fixed #174 (2026-07-15):** the hint names `describe -m`, and finalize now refuses an un-described change outright rather than defaulting its subject — the hint was the trigger, but `new`'s willingness to sign a nameless change was the foot-gun (ADR 0030 amendment). - **An oplog younger than the mistake protects nothing.** S4's `undo` exists for exactly this, but `.loot/ops` was minted the same day — the accidental finalize was **op 1, the floor**, and `undo` refuses to step behind it. Expected for a just-shipped feature; recorded so the next reader doesn't assume undo covers pre-oplog history. - **`log`'s live row mislabels the fresh-empty-working state.** After `new` plus an empty `describe`, `loot log` rendered the *signed tip* as "(working change)" (`wlwzrvry 0729287d`) and hid both the real working node (`xsynprqr 53902449`) and the tip's actual message — while `status --json` reported the working identity correctly. Display-only, but it actively masked the accidental-finalize state while diagnosing it. - **Lane reap can't survive the amend era (code-read, not live).** The ferry reap marks a lane landed when *any signed change* carries the lane's `change_id`, scanning the raw graph with no abandonment filter — correct today (one signed version per change id), but the moment `loot edit` (map #169) makes signed same-`change_id` versions routine, an amended change's review lane reaps itself on every pass. Filed ahead of #171. ## Verdict Every box of the map's destination is exercised by this file's own history: originated in loot, reviewed as projected unsigned WIP, landed by loot finalize, git `main` projected downstream, relay pushed the same day — twice (the evidence lane `f0acc001…`/PR #166 and the reconcile-fix lane that landed this amendment). loot led; git followed.