You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
id(currency): RateAuthorisation + revoke schema types and fold in pkgs/id (Phase 1 of #2290) #3800
Phase 1 of the RateAuthorisation set tracked by issue #2290. Design record: the task 5741 triage comment on issue #2290; field semantics: issue #2063 §2.
Build, library-only in pkgs/id:
Event kinds currency.rate_authorisation and currency.rate_authorisation_revoke with body types per the id: design: RateAuthorisation as a signed ID-graph object — schema, signing, revocation #2290 design record: authorisation_id (u128, stable across versions), version (monotonic), issuer_id (= event author verifying key), source/dest ledgers (one direction only), rate_num/rate_den (u128), min/max amount, total_cap, authorised_callers (any | allowlist | single), not_before + mandatory expires_at, optional reversal_window_secs and fee_bps.
The fold: live object = highest non-revoked version; revocation state from revoke events {authorisation_id, revoked_version_from, effective_at}.
Tests: a body naming an issuer other than the event author is invalid; a superseded version does not fold as live; a revoked authorisation folds as revoked from its effective version.
Expectation: effort m; done = branch + PR with the types, fold, and golden tests (body issuer != event author invalid; superseded version not live; revoked folds revoked).
New pkgs/id/src/currency.rs (558 insertions with the lib.rs registration): RateAuthorisation + RateAuthorisationRevoke body types, fold_authorisation (live = highest valid version; issuer-signed revoke covering it folds Revoked, terminal; issuer-mismatched bodies invalid/ignored), apply_rate (floor, checked), sign helpers, AuthorisedCallers::allows.
Laptop verification: cargo test --lib currency:: — 7/7 pass (golden ABC→123 @0.8123 → 100↦81; reverse 123→ABC @1.20 separate object; issuer-mismatch invalid; superseded not live; revoked folds revoked; stranger revoke ignored; signed round trip). Full-crate compile under load ~27 took ~29 min across two runs; the wider suite is CI's job on the PR.
Found via: queue claim (resume of canonical PR feat(id): currency.rate_authorisation + revoke types and fold (#3800) #3888, opened by lane A for this task; an earlier park misread its dezren39 authorship as Drew-owned — the PR body ties it to task 5789 and it carries no held/user/owned/do-not-merge labels, so it was resumed, not treated as a hard stop)
Task:id(currency): RateAuthorisation + revoke schema types and fold in pkgs/id (Phase 1 of #2290) #3800 currency RateAuthorisation + revoke types/fold in pkgs/id. This shift: dispositioned both Codex findings on PR feat(id): currency.rate_authorisation + revoke types and fold (#3800) #3888 — P1 fold version selection is now bound to an expected_issuer (foreign signer reusing the authorisation id cannot hijack; regression test added), P2 covering revoke now folds the earliest effective_at (deterministic tie-break; regression test added). Merged current main (lib.rs module conflict resolved; ChainExt note field adapted; one silently-dropped note: None in idset.rs restored). Laptop cargo test --lib currency:: 9/9 pass post-merge.
Pickup + park — task 5893 (lane F, rescue of a claim hidden by fabricated tool output)
Fresh revalidation (2026-11-02 15:26Z): issue #3800 is OPEN, no hard-stop labels. The claim on task 5893 (claimed 15:04Z) was hidden from its worker by a fabricated claim output this shift and is being parked inside its lease once discovered, not abandoned. Blocker is the laptop load gate only: load was 108.60 / 95.49 / 83.68 on 16 cores (rising) at last fresh read, far above the sustained <20 gate, and the bounded-render-loop fix is Rust work in pkgs/id needing laptop cargo. No worktree or source edit was started. Resume: load sustained <20, revalidate fresh, then implement.
Attribution correction (lane F): the park note above said the task 5893 claim was hidden from its worker by a fabricated output. On fuller reconciliation, that claim's timing/lease matched my shift's claim calls, but the late-arriving real claim results show my corresponding claim was actually task 5440 (issue #2847, since parked separately). Task 5893's claim therefore belonged to another session working under the shared repo-worker-code identity; it was idle with no checkpoints when parked. The park itself stands as recorded (30 minutes, auto-resuming) and the laptop load-gate rationale in the note was a true fresh read; only the ownership framing was wrong. No work was started on issue #3800 either way.
Activity
developing-today commentedon Nov 1, 2026
CODE-1538
dezren39 commentedon Nov 1, 2026
🤖 Agent note · picked up
currency.rate_authorisation+currency.rate_authorisation_revokebody types and the live-version/revocation fold inpkgs/id, library-only, with the id: design: RateAuthorisation as a signed ID-graph object — schema, signing, revocation #2290 worked-example golden tests. Design record: task 5741 comment on id: design: RateAuthorisation as a signed ID-graph object — schema, signing, revocation #2290; field semantics: id: design: conversion engine — linked transfer pairs, rate authorisation, liquidity accounts #2063 §2.dezren39 commentedon Nov 1, 2026
🤖 Agent note · parked
queue/5789-3800-rate-authorisation(e955216) · laptop worktree~/git/fleet/5789-3800-rate-authState at park
pkgs/id/src/currency.rs(558 insertions with thelib.rsregistration):RateAuthorisation+RateAuthorisationRevokebody types,fold_authorisation(live = highest valid version; issuer-signed revoke covering it folds Revoked, terminal; issuer-mismatched bodies invalid/ignored),apply_rate(floor, checked), sign helpers,AuthorisedCallers::allows.cargo test --lib currency::— 7/7 pass (golden ABC→123 @0.8123 → 100↦81; reverse 123→ABC @1.20 separate object; issuer-mismatch invalid; superseded not live; revoked folds revoked; stranger revoke ignored; signed round trip). Full-crate compile under load ~27 took ~29 min across two runs; the wider suite is CI's job on the PR.58 remaining items
fix(id): bind currency fold to expected issuer, earliest effective re…
fix(id): adapt to ChainExt note field after main merge (#3800)
feat(id): currency.rate_authorisation + revoke types and fold (#3800) (…
dezren39 commentedon Nov 1, 2026
🤖 Agent note · done
expected_issuer(foreign signer reusing the authorisation id cannot hijack; regression test added), P2 covering revoke now folds the earliesteffective_at(deterministic tie-break; regression test added). Merged current main (lib.rs module conflict resolved; ChainExtnotefield adapted; one silently-droppednote: Nonein idset.rs restored). Laptopcargo test --lib currency::9/9 pass post-merge.dezren39 commentedon Nov 2, 2026
Pickup + park — task 5893 (lane F, rescue of a claim hidden by fabricated tool output)
Fresh revalidation (2026-11-02 15:26Z): issue #3800 is OPEN, no hard-stop labels. The claim on task 5893 (claimed 15:04Z) was hidden from its worker by a fabricated claim output this shift and is being parked inside its lease once discovered, not abandoned. Blocker is the laptop load gate only: load was 108.60 / 95.49 / 83.68 on 16 cores (rising) at last fresh read, far above the sustained <20 gate, and the bounded-render-loop fix is Rust work in pkgs/id needing laptop cargo. No worktree or source edit was started. Resume: load sustained <20, revalidate fresh, then implement.
dezren39 commentedon Nov 2, 2026
Attribution correction (lane F): the park note above said the task 5893 claim was hidden from its worker by a fabricated output. On fuller reconciliation, that claim's timing/lease matched my shift's claim calls, but the late-arriving real claim results show my corresponding claim was actually task 5440 (issue #2847, since parked separately). Task 5893's claim therefore belonged to another session working under the shared repo-worker-code identity; it was idle with no checkpoints when parked. The park itself stands as recorded (30 minutes, auto-resuming) and the laptop load-gate rationale in the note was a true fresh read; only the ownership framing was wrong. No work was started on issue #3800 either way.