Skip to content

quest: plan moq-net API audit follow-ups and retire the public-model goal - #6581

Merged
kixelated merged 4 commits into
mainfrom
claude/moq-net-api-audit-e4f354
Oct 23, 2026
Merged

kixelated merged 4 commits into
mainfrom
claude/moq-net-api-audit-e4f354

Conversation

@kixelated

@kixelated kixelated commented Oct 23, 2026 •

Copy link
Copy Markdown
Collaborator

Plans the follow-ups of a second moq-net API audit (release 9da79786c2 vs main), and retires the public-model goal.

What changes

  • New api-audit children:
    • moq-transport stays private: with_url replaces with_path/with_authority, and transport::Binding becomes Address.
    • One lifecycle vocabulary: finish, abort, closed and close mean one thing on every handle, in Rust and JS.
    • moq-net names say one thing: wanted, allocator, Credential, info(), stats/transport collisions, and Wire owns the byte counts.
    • Request handlers are named requests: dynamic() becomes requests().
  • public-model is folded into api-audit and its goal is dropped. The goal was "a third party builds any publisher, subscriber, or relay from the public model". It made session-only items public with no outside consumer.
    • Session-only items stay private reverts the session-only items from moq-dev/moq#6111 and strips the marks.
    • serve, answer and claim-request-type move under api-audit, reshaped as described below.
    • routes.md, deferred.md and the README's toy-transport proof are deleted.
  • Marker lint and marks removed. sh/rs/model-markers.py, its test, its three CI hooks, and all 270 // pending:/// private: marks in rs/moq-net and js/net are deleted (comment lines only). The lint only enforced the dropped goal.
  • Existing quests amended:
    • net-exports gains the trims and a dead-code list. That list was found by marking every pub item #[deprecated] and building the workspace.
    • relay-config keeps the extensions TOML.
    • Links in ietf-extension, track-live, the m1 README and m2 quests are repointed.

Open PRs this reshapes

  • moq-dev/moq#6138 reshapes to one range setter: with_range plus its bug fixes, with everything else internal.
  • moq-dev/moq#6411 reshapes to source-enforced validity, with no public additions.
  • moq-dev/moq#6496 reshapes to a visibility change, with no Forward/ForwardRequest types.

Each gets a comment with its new plan. Their branches keep their public-model names.

Public API and wire impact

This PR changes neither. The quests plan breaking moq-net, @moq/net, moq-tokio and binding changes, and each child lists its own impact. Wire: none.

Checks

  • quest check: 569 documents ok
  • sh/js/workspace.test.py: ok
  • just check: passed (rs, js, quest, markdown, shell, gh)

Decisions (✅ selected)

Goal and placement: before the m1 cut, no public moq-net item (Rust or JS) exists only for moq-transport, and each remaining audit finding is removed, renamed, or made private.

  • ✅ api-audit children
  • New m1 epic
  • Split by priority

Group A, no external caller (Staged/stage, IETF-only Error/DecodeError variants, dead TooManyParameters):

  • ✅ Private or fold (later amended: "IETF only errors are fine. We should remove dead code though.")
  • Only Staged + dead

setup::Extensions::{auth, solicit, epoch}:

  • Drop, always offer
  • ✅ Keep as interop knobs

Client::with_authority:

  • ✅ One URL setter
  • Drop authority
  • Keep

Who reaches the extension knobs:

  • Rust API only (picked, then amended: "just leave the TOML code in")
  • ✅ Keep relay TOML (final)
  • Drop the fields too

URL setter type:

  • ✅ with_url(url::Url)
  • Target struct

setup::Token / Handshake::token:

  • ✅ Keep, after token-in-band
  • Fold into auth::Requests

SessionError codes only ietf/ produces:

  • ✅ Keep shared codes
  • Drop from public enum

largest() snapshot vs stream:

  • Stream gets a new name
  • Producer renamed
  • ✅ Leave it

Stats/Wire byte counters:

  • ✅ Wire owns bytes
  • Stats owns bytes
  • Leave it

transport::memory:

  • ✅ Leave it public
  • Feature-gate it

Epoch::time / moq_epoch_time_ms:

  • ✅ Remove both
  • Remove FFI only
  • Keep

announce::Consumer is_synced/synced:

  • ✅ Trim
  • Leave it

Misc:

  • ✅ MAX_QUIC private
  • Move server::Activity (later: ✅ leave it)
  • Move stats::Refusal (later: ✅ leave it)

JS exports used only inside js/net:

  • ✅ drop_groups internal (Rust and JS)
  • ✅ @internal Group.Demand and ConnectProps/AcceptProps.extensions

Rust track::Producer::close vs JS close:

  • abandon
  • detach
  • JS close -> finish
  • ✅ "abort instead of abandon", then ✅ fold into abort

group closed():

  • aborted()
  • ✅ restore meaning, as part of a full lifecycle consistency audit
  • leave

Demand vocabulary:

  • x()/x_changed()
  • ✅ use wanted everywhere
  • leave

Session::bandwidth():

  • ✅ allocator()/with_allocator()
  • leave

transport::Binding:

  • Addressing { Uri, Setup }
  • ✅ Address { Uri, Setup }
  • Target { Uri, Setup }

request_start / received():

  • with_floor / mark_received
  • ✅ with_floor / set_received (superseded: both went private)
  • leave

end() getter:

  • declared_end
  • finishes_at
  • ✅ finished() on the Producer only; JS Subscriber/Ordered end() go

Collisions:

  • ✅ stats::Control -> Message
  • ✅ stats::Bytes -> Totals
  • ✅ transport::Stats -> Metrics

Lifecycle vocabulary:

  • ✅ Adopt it
  • Adopt, keep JS close

Abort after settled finish:

  • ✅ Ignored for readers
  • A real update

JS consumer close():

  • ✅ Release only
  • Leave it

auth::Auth:

  • ✅ Credential
  • Token
  • Leave it

Track info lookup:

  • ✅ track::Consumer::info() -> Pending<Resolving>
  • InfoRequest
  • Keep Querying
  • Box it

broadcast Finish:

  • ✅ JS mirrors supersede; keep broadcast close
  • Mirror + rename close

Reservation:

  • ✅ consume() / rate
  • Leave it

dynamic():

  • Leave it
  • ✅ Rename to requests()

create_group:

  • ✅ JS only: writeGroup -> createGroup
  • insert_group everywhere
  • Leave it

subscription() aggregate:

  • ✅ Leave it
  • aggregate()

Dead-code scope:

  • ✅ Tier 1 + Tier 2 plumbing
  • Tier 1 only
  • All of Tier 2

Unused-race family vs public-model/answer:

  • Keep for answer.md
  • ✅ "we should challenge everything in public-model"

Where to challenge public-model:

  • Separate planning session
  • ✅ Here, now
  • Pause public-model

public-model goal:

  • ✅ Drop the goal
  • Park it in m2
  • Keep, reshape items

moq-dev/moq#6111 session-only items:

  • ✅ Revert to private
  • Keep public

serve.md:

  • ✅ Only with_range
  • Delete serve.md

moq-dev/moq#6138:

  • ✅ Reshape it (the maintainer hands it to this session)
  • Close it

answer.md:

  • ✅ Internal only
  • Delete answer.md

routes, deferred, claim-request-type, toy test:

  • ✅ Recommended set (delete routes/deferred, hatches pub(crate), moq-dev/moq#6496 visibility only, drop toy test)
  • Keep routes.md

Marker lint:

  • ✅ Delete lint + marks
  • Keep private: marks

Structure:

  • Keep the epic, new goal
  • ✅ Fold into api-audit

Fold order:

  • ✅ Delete the lint in this PR
  • Keep paths until children land

Open PRs moq-dev/moq#6411/#6496:

  • ✅ Comment with new plan
  • I'll handle them

🤖 Generated with Claude Code

(Written by Claude Opus 5.5)

kixelated and others added 3 commits October 23, 2026 10:34
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…goal

Adds api-audit children for moq-transport-only surface, one lifecycle
vocabulary, net renames, and dynamic() -> requests(). Folds public-model
into api-audit with its goal dropped: session-only items stay private,
serve/answer/claim-request-type are reshaped, routes and deferred are
deleted, and the model-markers lint that enforced the old goal goes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 23, 2026 •

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 31 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 9c9f9917-7781-4ff3-9988-0a59a7a1aa18
📥 Commits

Reviewing files that changed from the base of the PR and between 252e915 and f11fb72.

📒 Files selected for processing: 54
  • .github/justfile
  • js/net/src/announced.ts
  • js/net/src/auth_gate.ts
  • js/net/src/consume.ts
  • js/net/src/group.ts
  • js/net/src/hop.ts
  • js/net/src/internal.ts
  • js/net/src/ledger.ts
  • js/net/src/listing.ts
  • js/net/src/origin.ts
  • js/net/src/priority.ts
  • js/net/src/tail.ts
  • js/net/src/track.ts
  • js/net/src/wire.ts
  • quest/m1/README.md
  • quest/m1/api-audit/README.md
  • quest/m1/api-audit/announce-owner.md
  • quest/m1/api-audit/answer.md
  • quest/m1/api-audit/claim-request-type.md
  • quest/m1/api-audit/ietf-private.md
  • quest/m1/api-audit/js-prepared.md
  • quest/m1/api-audit/lifecycle.md
  • quest/m1/api-audit/model-private.md
  • quest/m1/api-audit/net-exports.md
  • quest/m1/api-audit/net-names.md
  • quest/m1/api-audit/relay-config.md
  • quest/m1/api-audit/requests.md
  • quest/m1/api-audit/serve.md
  • quest/m1/audit-lints.md
  • quest/m1/ietf-extension/README.md
  • quest/m1/public-model/README.md
  • quest/m1/public-model/answer.md
  • quest/m1/public-model/claim-request-type.md
  • quest/m1/public-model/deferred.md
  • quest/m1/public-model/routes.md
  • quest/m1/public-model/serve.md
  • quest/m1/track-live.md
  • quest/m2/audit-dead-code.md
  • quest/m2/release/api-review.md
  • rs/justfile
  • rs/moq-net/src/model/bandwidth.rs
  • rs/moq-net/src/model/broadcast.rs
  • rs/moq-net/src/model/datagram.rs
  • rs/moq-net/src/model/frame.rs
  • rs/moq-net/src/model/group.rs
  • rs/moq-net/src/model/listing.rs
  • rs/moq-net/src/model/mod.rs
  • rs/moq-net/src/model/object.rs
  • rs/moq-net/src/model/origin.rs
  • rs/moq-net/src/model/subscription.rs
  • rs/moq-net/src/model/track.rs
  • sh/js/workspace.py
  • sh/rs/model-markers.py
  • sh/rs/model-markers.test.py
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 23, 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-10-23T18:37:47.658768Z f11fb72 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: d2a9ef4705

ℹ️ 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 quest/m1/api-audit/model-private.md Outdated
They pointed at deleted quests once the marker lint went.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated

Copy link
Copy Markdown
Collaborator Author

Merge summary:

  • What it does: plans 8 api-audit children and folds public-model into api-audit with its goal dropped. It also deletes the marker lint and all 270 marks.
  • Reshaped PRs: moq-dev/moq#6138, moq-dev/moq#6411 and moq-dev/moq#6496 each have a comment with their new plan. refactor(net)!: one with_range cursor setter #6138 is being reshaped by the maintainer's request.
  • Review: Codex flagged the marks pointing at deleted quests, and they were removed in f11fb72. Codex then approved the head with a thumbs-up.
  • Checks: just check passed on the planning head, just fix is clean after the mark removal, and quest check --base origin/main is ok.
  • Decisions: every one is in the PR body with ✅.

(Written by Claude Opus 5.5)

@kixelated
kixelated added this pull request to the merge queue Oct 23, 2026
kixelated added a commit that referenced this pull request Oct 23, 2026
The public-model goal is dropped (#6581): items go public only
with a non-session consumer. with_range and the bug fixes stay; the
serving calls the sessions use go back to pub(crate) in Rust and hooks or
@internal in JS. Ordered.tryNextGroup stays public as GroupConsumer |
undefined, mirroring Rust poll_next_group, for js/json and js/flate.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged via the queue into main with commit 41ede2b Oct 23, 2026
10 checks passed
@kixelated
kixelated deleted the claude/moq-net-api-audit-e4f354 branch October 23, 2026 20:37
kixelated added a commit that referenced this pull request Oct 23, 2026
The maintainer reversed the drop in #6581: [listen|connect.extensions] is the
operator's interop knob for moq-transport extensions. Restore the moq-tokio
serde surface and docs, and test that the shared loader carries it through.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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