Conversation
A destination verifies a portable-reputation token with the issuer's public point for the token's cell, and nothing else from the issuer. This is the event that publishes those points. - Kind 38387, addressable, `d` = `reputation-keyset:<epoch>`, with the epoch repeated as its own tag. The epoch is inside `d` because addressable events replace on (kind, pubkey, d): a fixed `d` would delete the previous keyset on every rotation and strand tokens from an epoch still being accepted. - Content carries `cells`, the effective cells and their compressed points, and `merges`, the published raw to effective map, so a client reproduces the issuer's K-anonymity assignment instead of trusting it. - The five checks a consumer must pass before caching an event, so a relay or a third party cannot substitute a point. - Epoch is the UTC calendar year, a protocol constant rather than an issuer choice, and a destination accepts the current and previous only. - A keyset is immutable within its epoch, with the failure it prevents spelled out: recomputing the merge on a restart would drop the key of a cell folded away since, and every token minted against it would stop verifying. Adds 38387 to the event-kind tables on both pages that carry one. Reputation portability plan, phase 0, PR 0.3 (mostro docs/REPUTATION_PORTABILITY.md §5.2). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jkd49JmWc7twBRrYTgjnR2
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. 🗂️ Base branches to auto review (1)
Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 41f859011d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| 5. `content` parses into `cells` and `merges`, every key of both is a valid | ||
| [cell id](./reputation_bands.md#cell-id), every value of `cells` is a valid | ||
| compressed point on secp256k1, and every value of `merges` is a cell id. |
There was a problem hiding this comment.
Validate merge chains before caching the keyset
The listed acceptance checks allow a keyset whose merges values are syntactically valid cell IDs but form a cycle or terminate at a cell absent from cells. Such an event passes check 5 and may be cached, yet consumers cannot resolve affected raw cells to a verification key; merely terminating the traversal on a cycle does not make the keyset usable. Require the 36-cell exclusive partition stated above and verify that every merge chain is acyclic and ends at a key present in cells before caching.
Useful? React with 👍 / 👎.
38387 is already spoken for: PR #56 reserves it for announcement events. That PR is open rather than merged, so the row is absent from main and a grep of this repo does not show it, which is how the collision got here. The keyset takes the next free slot instead. Nothing else about the event changes. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Jkd49JmWc7twBRrYTgjnR2
|
Corrected: the keyset event now takes 38388, not 38387. 38387 is already spoken for by #56, which reserves it for announcement events. That PR is open rather than merged, so the row is absent from Pushed as a follow-up commit rather than a rebase, so the review history on this PR stays intact, and merged forward into #62 and #63. No One thing for whoever merges second. Both #56 and this PR add a row to the event-kind tables in |
Summary
Phase 0, PR 0.3 of the reputation portability plan (
mostro/docs/REPUTATION_PORTABILITY.md, §5.2).New page
src/reputation_keyset.md.38387reserved — the next free number after disputes (38386), added to the event-kind tables on bothorder_event.mdandoverview.md.d=reputation-keyset:<epoch>, with the epoch repeated as its own tag and required to agree. The epoch lives insidedbecause addressable events replace on(kind, pubkey, d): a fixeddwould delete the previous keyset on every rotation and strand tokens from an epoch the destination still accepts.cells(effective cells → compressed points, lowercase hex) andmerges(the published raw → effective map from docs(reputation): specify the reputation band grid #60), with the rule that every one of the 36 raw cells is a key of exactly one map.P_cell.Open decision closed
Open decision 4 of the proposal, at the proposal's own default for the epoch length:
38387The kind number wants your sign-off — it is the first number claimed outside the 38383-38386 block and is expensive to move once an issuer publishes.
Out of scope
Points are described here only as "33-byte compressed SEC1, lowercase hex" because the keyset content needs it. The full canonical encoding table, the token shape and the four actions land in 0.4; the vectors in 0.5.
Checks
mdbook buildsucceeds locally🤖 Generated with Claude Code
https://claude.ai/code/session_01Jkd49JmWc7twBRrYTgjnR2