Repository navigation
Description
Ruling: Session B close-out §3 question 6 (docs/sessions/2026-10-session-b.md), ruled 5 October 2026: "yes. accept, accept --batch and the inbox read keys, grants and policy from the union of branch and base, as verify --base does." Recorded in docs/signing-rulings-2026-10.md, "Session B close-out (ruled 2026-10-05)". Spec: docs/ledger-format-v1.md §3.10.5 (trusted bindings) and §3.10.6 ("Branches"). Size: M. Depends on: #92 merged. Must land: before the Varve import (#73) is run with more than one branch open.
Why
ledger verify --base <ref> computes landing against the base and reads the base's log files and sidecars that a branch checkout lacks (landing::Landing::compute, verify::Options::base). The signing verbs do not. They read authority from the checkout alone:
- the signer's key bindings (
author/sign_ops.rs); - the grants and policy behind
under(author/acceptance_ops.rsdecision_authority,author/batch_accept.rsresolve); - the inbox's grant column (
inbox::list::grant_on, overrevision::load_atof the branch).
The consequence, found in #92: a holder who rotates keys on the default branch cannot sign on a branch cut before the rotation. accept --batch refuses there until the branch merges the default branch, even though verify --base would pass the result.
What to build
acceptandaccept --batchtake--base <ref>. They read key bindings, grants, grant acceptances, revocations and policy from the union of the branch and the base, with the same landing orderverify --baseuses.- The default must not rely on
origin/HEAD. Either it is explicit, or it usesLanding::default_base, asverifydoes. The PR states which.
- The default must not rely on
- The inbox passes
--base <remote>/<default>to everyaccept --batchit runs, as it already does toverify.grant_onresolves over the same union. - Terminating entries on the base apply on the branch: a key closed, a grant revoked, or a policy filed on the base. So a branch cannot be used to sign with something the base has ended.
- No format change. This is how the verbs read the store, not what they write.
Tests
- Rotate the key on
mainafter the branch is cut.inbox acceptsigns on the old branch, andverify --base origin/main --exportis green. This is the case#92'san_acceptance_under_a_since_closed_key_is_affirmed_in_the_same_batchcurrently avoids by rotating first. - A key revoked on the base is refused on the branch.
- A grant revoked on the base is refused on the branch.
- A policy filed on the base governs the branch.
- Without
--baseand with noorigin/HEAD, the verb behaves as the PR states, and a test pins it.
Metadata
Metadata
Assignees
Labels
Type
Fields
Priority
Effort
Progress
Activity
ledger inbox: verify before push, sweep stale worktrees, test signing…
Hafeok commentedon Nov 3, 2026
Closed as not carried under D1.24`` and the definition's chapter 8:``` the Rust tool is frozen at
rust-finaland its tree left `main` in #166 (`53bd547`). This concerns the Rust ledger (its keys, namespaces or authority), which is Writ's authority graph now. The rewrite holds no key and no grant, and `writ import` reads `.decisions/` once, at the tag. Disposition approved on #165.Generated by Claude Code