docs: resync docs.decdn.org with the current protocol spec - #232
Conversation
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Deploying website with
|
| Latest commit: |
07849c7
|
| Status: | ✅ Deploy successful! |
| Preview URL: | https://820302b4.website-70y.pages.dev |
| Branch Preview URL: | https://claude-decdn-docs-freshness.website-70y.pages.dev |
There was a problem hiding this comment.
🟡 Changes recommended
A few internal inconsistencies in the updated payments/slashing docs could mislead readers (voucher/preimage wording, bond flow phrasing, and MB vs MiB unit mixing).
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Resyncs the Mintlify documentation under docs/ to match the current protocol spec, removing deprecated protocol concepts (notably gossip discovery and per-peer payment channels) and updating core protocol pages to the new pool/voucher/preimage payment model, local-only reputation, and revised slashing/takedown/governance behavior.
Changes:
- Rewrites payments from per-pair channels to a shared on-chain pool with capabilities, cumulative vouchers, and hash-chain metering.
- Removes the gossip-based discovery layer in favor of the on-chain registry active set + DHT discovery/coverage.
- Updates slashing/reputation/takedown/governance and overview pages to reflect revised evidence paths, local reputation, namespaces/origin assignment, and updated ADR index.
File summaries
| File | Description |
|---|---|
| docs/protocol/takedown.mdx | Updates takedown model to include positive origin assignment and revised emergency/regional semantics. |
| docs/protocol/slashing.mdx | Revises slashable offenses and adds commit–reveal challenge flow plus “not slashable” section. |
| docs/protocol/reputation.mdx | Rewrites reputation as local-only EWMA scoring with decay-to-neutral behavior. |
| docs/protocol/privacy.mdx | Updates privacy analysis to the pool-based payment model and revises committed mitigations. |
| docs/protocol/payments.mdx | Replaces channel lifecycle with pool lifecycle, capabilities, vouchers, hash-chain metering, and minDeposit. |
| docs/protocol/network.mdx | Replaces gossip discovery with registry active-set discovery and coverage-aware DHT probing/selection. |
| docs/protocol/governance.mdx | Updates bootstrap/governance transition description and expands governable parameter bounds. |
| docs/protocol/content-addressing.mdx | Adds publishers/namespaces framing and updates trust/availability statements. |
| docs/overview/participants.mdx | Aligns role descriptions with registry+DHT discovery and pool/voucher payments. |
| docs/overview/introduction.mdx | Updates introductory framing to pool-backed vouchers and removes gossip wording. |
| docs/overview/how-it-works.mdx | Updates mermaid flows and narrative for pool redemption, namespaces, coverage, and no-hedging multi-source fetch. |
| docs/overview/glossary.mdx | Updates definitions for pools/capabilities/coverage/namespaces and new multi-source behavior. |
| docs/overview/design-decisions.mdx | Updates ADR index rows (removes retired entries; adds new ADR 040/041). |
| docs/overview/architecture.mdx | Updates diagrams and “life of a paid delivery” to match the new discovery and payments model. |
Review details
- Files reviewed: 14/14 changed files
- Comments generated: 3
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Review pass — 26 corrections in
|
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
There was a problem hiding this comment.
🟡 Changes recommended
A few internal doc inconsistencies/wording issues remain (notably governance parameter bounds vs explanatory text, and origin-assignment terminology) that should be corrected before merge.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
Suppressed comments (1)
docs/protocol/takedown.mdx:73
- This paragraph hard-codes the blacklist violation slash tiers as 5% / 15% / 50%, but governance.mdx now describes the tiers as governable within hardcoded bounds. To keep the docs internally consistent, this line should clarify these are the current/default tiers (and link to the governability note).
## Slash schedule
Blacklist violations use an escalating schedule: **5% / 15% / 50%** for first / second / third offense (capped at 50% per offense). Offenses accumulate over the operator's lifetime; a node whose bond falls below 50% of the minimum is auto-ejected.
- Files reviewed: 14/14 changed files
- Comments generated: 2
- Review effort level: Lite
| | Role | Operated by | Participates in CDN? | | ||
| | ------------------------ | ------------------------------------------------ | ----------------------------------------------------------- | | ||
| | **Node (pure cache)** | Independent node operator | Yes — bonds, probes, publishes to the DHT, delivers | | ||
| | **Node (origin-backed)** | Content provider _or_ node operator with storage | Yes — same protocol, plus a publisher-seated origin backend | |
There was a problem hiding this comment.
Fixed in 6c29e1b. Checked against the spec and the seating attaches to the wrong object: a vetted publisher authorizes an operator for a namespace, and only then does that operator configure its origin store locally. The backend is downstream of the seating and is never seated by anyone — backends are purely operational, and configuring one without authorization just means the bytes serve as cache. The row also contradicted the origin invariant further down the same page. Now reads "plus authorization to serve as an origin for a namespace".
| | Parameter | Default | Bounds | | ||
| | ----------------------------------------- | -------- | ------------ | | ||
| | Operator revenue share (`FeeRouter` base) | 60% | 40% – 90% | | ||
| | Burn share (`FeeRouter`) | 30% | 5% – 50% | |
There was a problem hiding this comment.
Fixed in 6c29e1b. The table contradicted its own explanation four lines below it. The spec carries the qualifier inline for exactly this reason — default "30% (0% while dormant)", min "5% when active", max 50% — so the row now matches that shape: Default 30% (0% dormant), Bounds 5% – 50% when active.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Review notes after checking the branch against the current ADRs and contract surface:
Validation on |
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
All six fixed in 07849c7. Verified each against the contracts/ADRs before applying.
Prettier, markdownlint, 463 tests, and |
Why
docs/is the Mintlify source fordocs.decdn.org, and perdocs/README.mdits source of truth is the protocol spec in the sibling repo. The last content resync landed 2026-07-09 (#187, #184); every commit todocs/since has been SEO or config.The spec moved substantially in that window — a payment primitive was replaced, a discovery layer was deleted, the reputation model was inverted, a slashable offense was removed, and two decision records landed. The published docs were describing contract functions and message flows that no longer exist, which is a correctness problem on a public site: a reader following
/protocol/paymentswould try to call functions that aren't in the contracts.What changed
All 14 pages, no new pages, no
docs.jsonchange.Payments — rewritten. Per-pair payment channels are gone.
/protocol/paymentsdescribedopenChannel/closeChannel/disputeChannel, voucher nonces, a dispute window,cooperativeClose, and per-stream cadence negotiation — none of which exist. Replaced with the shared pool: one deposit per payer opened once and off the fetch path, capped delegated signers via off-chain capabilities, cumulative node-addressed vouchers, hash-chain (PayWord) metering at a fixed 1 MiB quantum, per-node redemption with no dispute window, the redemption grace window, the credit window, and the dormantminDepositSybil knob. The stale vocabulary had leaked into five other pages, all corrected.Gossip removed. There is no gossip layer in the protocol any more — node discovery is the on-chain registry active set, region comes from the on-chain claim, rates are quoted in signed probe responses. It was referenced in seven places across six pages, including two mermaid diagrams.
Reputation — rewritten. The page described signed peer reports, reporter weighting against on-chain settlement history, per-report clamps and a cold-start bonus. Reputation is now strictly local: an EWMA (α = 0.1) over speed / correctness / reachability, neutral 0.5 for unknown peers, closed-form half-life decay, and explicitly not an eligibility, settlement or governance input.
Slashing — two offenses, not three. Phantom announcement is gone; only rate manipulation and blacklist violation remain. Added the commit–reveal challenge flow (which exists to stop the challenger reward being front-run) and a short section on what is deliberately not slashable — corrupted delivery and refusing to serve.
Multi-source fetch. Was "full holders only for now" with hedged stragglers. Partial holders are now first-class via 64 MiB coverage bitmaps, the scheduler fans out eagerly and admits at most one node per operator, and hedging was rejected by decision — every byte is paid, so the tail is bounded by deadline-based reassignment instead.
Governance. The bootstrap phase was documented as ending at ≥ 30 operators and ≥ 100 Gbps. There is no threshold automation — the multisig ends it by scheduling a single timelock batch as a manual judgment call. Also replaced the dispute-window bounds row with the redemption grace window, added defaults and the missing rows, and corrected the emergency multisig's capability list (blacklist-entry appeals were retired).
Publishers and namespaces, absent from the docs entirely despite
namespaceIdnow riding on every delivery request, folded into architecture, content addressing, takedown and the glossary — along with the positive origin authority (governance vets a publisher wallet; the vetted publisher seats its own origin operators per namespace).Also: the retired stream-response redirect field; the invented "PostgreSQL or SQLite" content-catalog schema; the privacy page overstating four committed mitigations when two are committed and identity rotation is accepted-not-mitigated; and the ADR index listing two retired records as accepted while missing two new ones.
Notes for review
how-it-works.Verification
All four
docsworkflow gates pass locally:pnpm exec prettier --check "docs/**/*.{md,mdx,json}"pnpm exec markdownlint-cli2— 0 errorsnpx mintlify@4.2.555 broken-links— no broken linkspnpm test— 22 files, 463 tests passedpnpm buildis unaffected;docs/is not part of the static export andwebsite.ymlignores it.🤖 Generated with Claude Code