Skip to content

quest(no-spawn): split into an epic with four children - #7519

Merged
kixelated merged 4 commits into
mainfrom
quest/m1/poll-first/no-spawn
Nov 2, 2026
Merged

kixelated merged 4 commits into
mainfrom
quest/m1/poll-first/no-spawn

Conversation

@kixelated

@kixelated kixelated commented Nov 1, 2026 •

Copy link
Copy Markdown
Collaborator

Splits quest/m1/poll-first/no-spawn.md into the epic quest/m1/poll-first/no-spawn/ with four children, as the maintainer decided. This is a quest-only checkpoint: no code changes.

Summary

  • no-spawn.md becomes no-spawn/README.md. The Goal is unchanged. The Plan records the split, and lists the spawns that stay and belong to the spawn audit.
  • New children, in Required order. Each child lists the spawns it covers on main and the decisions that belong to it:
    • cluster.md, [L] Cluster polls its own work. It is ready now and records D2 and D5.
    • admissions.md, [S] Admissions and stats are polled. It requires cluster.md and records D3. moq-dev/moq#7360 merged today, so it is no longer a blocker.
    • ffi.md, [M] moq-ffi spawns only its root. It requires Poll-native async in moq-ffi, the quest behind moq-dev/moq#7497, and records D4.
    • sim-tests.md, [M] The relay's in-memory tests run on kio's simulator. It requires cluster.md and admissions.md, and notes that it may move to m2.
  • Links to the old path now point to the epic README. In ffi-poll-migrate.md, the Related link now points to ffi.md.

Decisions (maintainer, 2026-11-01)

  • D1. How should the quest be split?
    1. ✅ Make it an epic with four children, in this order: (a) cluster, (b) admissions and stats, (c) moq-ffi, (d) simulator tests.
    2. Keep one PR, and wait for fix(tokio)!: fail Listener::accept on a dead transport and supervise the remaining long-lived tasks #7360 and perf(ffi): poll-native async for kio-backed reads #7497.
    3. Two PRs: relay and stats first, then moq-ffi and the tests.
  • D2. What does Cluster::new return, and who polls it?
    1. ✅ Cluster::new(options) -> anyhow::Result<(Cluster, Driver)>, the same shape as origin::Producer::new. Relay::run polls Driver next to Started::run, and Driver turns a child's panic into an error.
    2. Keep the signature, and move the driver into Started::run.
  • D3. Who polls an HTTP admission?
    1. ✅ The caller waiting on Answer polls the moq_auth::Client request inline, and dropping the wait cancels it.
    2. One long-lived kio::Tasks of admissions, polled by Relay::run.
  • D4. What is moq-ffi's root at the binding boundary?
    1. ✅ One runtime-owned driver task that holds every Background as kio::Tasks children.
    2. Each handle's calls poll its own Background.
  • D5. Is it acceptable that peer dials stop running in parallel?
    1. ✅ Accept it, and measure it once in child (a).

Choices made without asking

  • This PR does not deliver child (a). It lands the split as a quest-only checkpoint, for two reasons:
    • Child (a) is a full [L] change on its own. It touches about 68 Cluster::new call sites, reworks DialMap and Dialers, adds a Driver that catches panics, and needs the D5 measurement.
    • quest mv refuses to move a quest while it is claimed, and git cannot create a child's branch (quest/m1/poll-first/no-spawn/cluster) while this PR's branch quest/m1/poll-first/no-spawn exists. I made the move by hand. Once this PR merges, quest start can claim (a) on its own branch.
  • I sized the children (a) [L], (b) [S], (c) [M], (d) [M]. The epic carries no size.
  • Child (c) is in m1 but requires an m2 quest, ffi-poll-migrate.md. Its PR is ready for review, so I did not move it.

Follow-ups (suggested)

  • After this merges, claim Cluster polls its own work, which is ready now.
  • Critical will still spawn ACME renewal and the web certificate reload after this epic. The spawn audit should list them. The epic README now names them.

Review

Skipped under the simple-review rule: the change touches only quests. quest check --base origin/main passes (646 documents ok). quest unblocked reports cluster.md as ready and the other three children as blocked on the intended quests.

(Written by Claude Opus 5.5)

🤖 Generated with Claude Code

kixelated and others added 2 commits November 1, 2026 01:19
The auth decider loop and moq-stats' publisher split are in #7360,
and moq-ffi's task plumbing is in #7497. Point at both so this
quest builds on them instead of redoing them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kixelated and others added 2 commits November 1, 2026 14:26
The maintainer accepted D1 to D5 on #7519 (2026-11-01):
the quest becomes an epic whose children are the cluster's own work,
admissions and stats, moq-ffi's root, and the relay's simulator tests.
Each child records the decisions that belong to it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title Libraries spawn nothing quest(no-spawn): split into an epic with four children Nov 1, 2026
@kixelated
kixelated marked this pull request as ready for review November 1, 2026 22:29
@pullfrog

pullfrog Bot commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor

Pullfrog's billing service is temporarily unavailable, so this run didn't start. This is on our side, and nothing was billed. The next run should succeed; if it keeps failing, check status.pullfrog.com.

Pullfrog  | Rerun failed job ➔ | View workflow run | via Pullfrog

@coderabbitai

coderabbitai Bot commented Nov 1, 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 10 seconds.

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: 28c983b2-c26b-4652-a598-5cae0089a60f
Commits

Reviewing files that changed from the base of the PR and between d0dc5dd and 6080800.

Files selected for processing: 11
  • quest/m1/poll-first/README.md
  • quest/m1/poll-first/no-spawn.md
  • quest/m1/poll-first/no-spawn/README.md
  • quest/m1/poll-first/no-spawn/admissions.md
  • quest/m1/poll-first/no-spawn/cluster.md
  • quest/m1/poll-first/no-spawn/ffi.md
  • quest/m1/poll-first/no-spawn/sim-tests.md
  • quest/m2/ffi-poll-migrate.md
  • quest/m2/net-wrap/README.md
  • quest/m2/spawn-audit.md
  • quest/m3/studio/web/video-web.md
  • 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

@kixelated kixelated left a comment

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.

Automated review by review (OpenAI)

Reviewed commit: 60808005b10777d4a9b91289c1b9e5fc1053be39.

No actionable bugs found in this quest-only change. Splitting the work along ownership boundaries is clearer than one coupled implementation: cluster driving can land first, admissions build on it, and the FFI child waits for its plumbing rewrite. The original goal and explicit remaining-spawn scope are preserved; this PR changes no executable behavior, public API, or wire format.

Verification: read all changed plans, checked their local link targets against the head tree, and cross-checked relevant cluster, admission, FFI, and integration-test code. No prior published review to compare. Static review only; I did not run quest check, tests, or benchmarks. The simulator prerequisites and dial-performance measurement remain work for the implementation children, not results established here.

(Written by OpenAI)

@kixelated
kixelated enabled auto-merge (squash) November 1, 2026 22:33
@kixelated
kixelated added this pull request to the merge queue Nov 2, 2026
Merged via the queue into main with commit 2eec576 Nov 2, 2026
6 of 7 checks passed
@kixelated
kixelated deleted the quest/m1/poll-first/no-spawn branch November 2, 2026 09:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant