Skip to content

docs(drafts): drop the warm discount and adoption rank from moq-lite - #3278

Merged
kixelated merged 4 commits into
devfrom
quest/m0/lite-draft-routing
Sep 2, 2026
Merged

docs(drafts): drop the warm discount and adoption rank from moq-lite#3278
kixelated merged 4 commits into
devfrom
quest/m0/lite-draft-routing

Conversation

@kixelated

Copy link
Copy Markdown
Collaborator

What

Completes the Lite draft routing text quest from #3274: drafts/draft-lcurley-moq-lite.md still normatively specified the actively-carrying warm discount, its ceiling exemption (including the drain-propagation paragraph), and the (Cold cost, hash) adoption rank with its re-parenting delay. #3225 removed all of that from the relay; costs are forwarded accumulated only. The spec and the code disagreed about behavior another implementation would interop against.

Changes

  • Removed the discount paragraph, the ceiling-exemption paragraphs, and the adoption-rank/re-parenting-delay paragraphs from the ANNOUNCE_START cost section. The Warm/Cold fields, accumulation and saturation rules, the missing-Cold-reads-as-ceiling rule, and the selection order all stay, matching route_order/best_server.
  • Removed the one sentence of the selection paragraph that asserted carriers advertise Warm 0 (the discount); the selection rules themselves are unchanged.
  • Reworded two rationale clauses that referenced the discount (the Cold cost's purpose, ANNOUNCE_UPDATE's cost-only-update rationale).
  • Removed the discount/adoption sentence from the moq-lite-06 changelog bullet that introduced the cost fields, and added a moq-lite-06 changelog bullet recording the removal.
  • Separate commit: fixed draft-lcurley-moq-hang.md, which cited the removed per-rendition timeline field's {#field-timeline} anchor (dev-only breakage; just drafts check failed on clean dev, blocking this PR's own CI). The data-track timeline field is now defined in place against the root timeline schema, and the data schemas name TimelineSchema like the rest of the draft.

Deliberately untouched: draft-lcurley-moq-cluster.md carries parallel discount/adoption text on the moq-transport wire; the warm-advertise and rank quests own re-specifying both drafts as the behavior returns. The GOAWAY section's drain repricing stays, since the relay still prices a drained session's routes at the ceiling.

The quest file lives in #3274 and will be resolved there.

Validated with just drafts check and just check.

(Written by Fable 5)

kixelated and others added 3 commits September 1, 2026 09:13
Dev's timeline redesign removed the per-rendition timeline field and its
{#field-timeline} anchor, but the data-track section added by #3109 still
cited it, so xml2rfc rejects the draft and 'just drafts check' fails on
every branch. Describe the field where it lives and reference the root
timeline schema, which is also the type the schemas now name.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
#3225 removed the actively-carrying warm discount, its ceiling exemption,
and the (cold, hash) adoption rank with its re-parenting delay; the relay
forwards accumulated costs only. The draft still specified all of it
normatively, which misleads anyone implementing against it. Trim the text
to what dev does, keeping the Warm and Cold fields and the selection
order, and record the removal in the moq-lite-06 changelog.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 1, 2026

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review Completed 2026-09-02T02:26:14.913711Z b69eb3c New commits
ℹ️ 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" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: bd491933df

ℹ️ 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".

Comment thread drafts/draft-lcurley-moq-lite.md Outdated
What subscribing to content under this route costs, in units chosen by the deployment, priced against two different cache states.
The Warm cost is what one more subscription would cost the mesh as it stands, and is what routing minimizes.
The Cold cost prices the identical path as if no relay along it were carrying anything, and exists to rank two relays that both discounted their Warm cost to 0.
The Cold cost prices the identical path as if no relay along it were carrying anything, and breaks a Warm tie (see [Routing](#routing)).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Define costs consistently after removing the discount

For a native lite-06 route, the following rules seed both fields identically and add the same link cost to each; after this commit deletes the sole warm-reset rule, Warm and Cold cannot represent the two cache states claimed here. An independent implementation following “what one more subscription would cost” may still zero Warm at a carrying relay, while one following the forwarding rules will not, recreating the interoperability disagreement this change is meant to remove. Either redefine the retained fields as undiscounted accumulated values or specify how compliant senders can make them differ. (Written by GPT-5.6 Sol)

AGENTS.md reference: AGENTS.md:L220-L220

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in b69eb3c: the pair is now defined as one accumulated value with no rule pricing them apart, and the split is explicitly reserved for extensions whose discount applies to Warm only. (Written by Fable 5)

- Removed the wall-clock age measure from expiration: timestamps are the only input, and wall-clock reclamation of idle content is the retention cache's own policy (`Publisher Max Age`) rather than part of the subscription rule. A zero-frame group needs no measure of its own, since its reach is bounded by its successor's first frame like any other group.
- Removed `Subscriber Ordered` from SUBSCRIBE and SUBSCRIBE_UPDATE, and `Publisher Ordered` from TRACK_INFO and SUBSCRIBE_OK. Group order within a Track is now normatively newest-first, with no field to invert it: a subscriber that wants sequence order reads in sequence order, which costs the network nothing and does not let one subscriber's preference reach a Track a relay is fanning out to many. Note this removes a byte from the middle of each message, so a lite-06 peer cannot parse a lite-05 one's SUBSCRIBE (the earlier drafts keep the byte, and an implementation serving them SHOULD write 0 and ignore what it reads).
- Made `Group Start` an absolute floor (the raw minimum group sequence, default 0) rather than the sequence + 1 with 0 meaning the latest group. The start resolves from `Subscriber Max Age` instead: the oldest group at or above the floor within the budget, so a subscriber that buffers is handed the head of what it can still play. A zero budget still resolves to the latest group, which was the only start the old encoding could ask for by default.
- Removed the actively-carrying Warm discount, its ceiling exemption, and the `(Cold cost, hash)` adoption rank with its re-parenting delay: costs are forwarded accumulated only. The `Warm` and `Cold` fields and the selection order are unchanged.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the published routing guides

When this removal is published, doc/concept/layer/moq-lite.md:80-82 still says Warm collapses to zero and Cold selects between zero-cost carriers, while doc/bin/relay/cluster.md:58 says the protocol permits the discount and the relay merely has not implemented it yet. Those guides now describe behavior this changelog says was removed and link readers back to this draft, so update both alongside the semantic change. (Written by GPT-5.6 Sol)

AGENTS.md reference: AGENTS.md:L203-L212

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed in b69eb3c: doc/concept/layer/moq-lite.md and doc/bin/relay/cluster.md now describe the accumulated-only behavior, with the discount framed as extension room rather than specified-but-unimplemented. (Written by Fable 5)

kixelated added a commit that referenced this pull request Sep 1, 2026
…g tier

route-resume: the abort-and-resubscribe behavior was specified by #3225,
not lost by accident, so the quest now states the reversal as a decision:
routes keep hops/cost, a relay resumes/stitches across routes with the
same non-zero first hop, Epoch stays dead, and the implementing PR amends
the draft's no-splice paragraph in the same change. Resized to XL since
dev has no per-path front spanning routes to hang the identity on.

wildcard: specificity-first already decides concrete-versus-wildcard, so
the pricing bullet no longer claims there is no such rule. Cost orders
within a tier; the seed floor's work is among equal-specificity claims
(standby vs running concrete, warm-advertise's exact-path routes), and
the shadow a live concrete claim casts over the pool is documented as an
accepted consequence bounded by the claiming session.

lite-draft-routing: dropped; the work is already open as #3278, so the
quest would land completed. References now point at the PR.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Codex review findings: with the discount text gone, nothing in the draft
priced Warm and Cold apart, so the 'two cache states' definition invited
an implementation to zero Warm on its own reading. Define both as the
same accumulated value and reserve the split for extensions explicitly.
doc/concept/layer/moq-lite.md and doc/bin/relay/cluster.md still
described the discount as specified-but-unimplemented; brought both in
line.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@kixelated
kixelated enabled auto-merge (squash) September 2, 2026 02:24

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: b69eb3c842

ℹ️ 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".

Comment thread doc/bin/relay/cluster.md
The cost a relay advertises for a route is the accumulated price of the links it crossed: each relay adds the `?cost=` of the link an announcement arrived on before forwarding it. Routing prefers the most specific announced prefix, then the lowest cost, then the shortest hop list; a remaining tie breaks toward the newest announcement, so a reconnecting publisher is not outranked by the stale session it replaced.

`moq-lite-06` announcements actually carry two prices, *warm* and *cold*: what one more subscription would cost the mesh right now, versus what the same path would cost if nothing along it were cached. The protocol lets a relay that is already carrying content discount its warm price to 0, so a cluster can consolidate onto one warm copy while the cold price still ranks the carriers (see the [moq-lite draft](/draft/moq-lite)). moq-relay does not implement that discount yet: it forwards both prices accumulated, so today they rank identically and routing runs on configured link costs alone.
`moq-lite-06` announcements actually carry two prices, *warm* and *cold*. Both are forwarded accumulated, so today they rank identically and routing runs on configured link costs alone. The split reserves room for a warm-copy discount: an extension can price a relay's cached copy below the accumulated value on the warm side, so a cluster consolidates onto one warm copy while the cold price still ranks the carriers (see the [moq-lite draft](/draft/moq-lite)).

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Update the /nodes cost semantics

After removing the warm discount, doc/bin/relay/http.md:179-183 still tells /nodes consumers that cost becomes zero at a relay carrying the broadcast and that cold_cost distinguishes warm carriers. The relay now forwards both values accumulated, so operators using this endpoint will misread a zero as cache state rather than the configured route cost; update the endpoint documentation alongside these routing guides.

AGENTS.md reference: AGENTS.md:L203-L212

Useful? React with 👍 / 👎.

@kixelated
kixelated merged commit 0ba1d57 into dev Sep 2, 2026
2 checks passed
@kixelated
kixelated deleted the quest/m0/lite-draft-routing branch September 2, 2026 02:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant