diff --git a/.claude/skills/quest-review/SKILL.md b/.claude/skills/quest-review/SKILL.md index 84906a4c5..39c62d32e 100644 --- a/.claude/skills/quest-review/SKILL.md +++ b/.claude/skills/quest-review/SKILL.md @@ -1,6 +1,6 @@ --- name: quest-review -description: Review a PR's branch locally with a model that wrote none of it, then mark it ready for review. +description: Review a PR's branch locally with a model other than its latest writer, then mark it ready for review. --- Run `quest skill review` and follow its output. diff --git a/flake.lock b/flake.lock index 4f61795ad..3816ec3b6 100644 --- a/flake.lock +++ b/flake.lock @@ -62,28 +62,27 @@ "quest-pinned": "quest-pinned" }, "locked": { - "lastModified": 1794089039, - "narHash": "sha256-HZVGUPSw4xRsHgI1xxuZhUbRTdnPlz6OHx/hdUew668=", + "lastModified": 1794340168, + "narHash": "sha256-ZhN/HCLzalBki/eYENHVp7lPFKRa88HF9aAzdl4Wlfw=", "owner": "moq-dev", "repo": "quest", - "rev": "6a18b8a815c2d15d37d7433a619f961ec5a07165", + "rev": "ecf40e27dd80012265afdae3f9f5866a579449b7", "type": "github" }, "original": { "owner": "moq-dev", "repo": "quest", - "rev": "6a18b8a815c2d15d37d7433a619f961ec5a07165", "type": "github" } }, "quest-pinned": { "flake": false, "locked": { - "lastModified": 1794013809, - "narHash": "sha256-0oc+GpBYSBVXsUBTdJ26HgsIGyak4uZ85/V3fJPCdeI=", + "lastModified": 1794155982, + "narHash": "sha256-KuQQ8ykYgTd0kJ76PA8Jao/UQcoxn7X9uZCj3lV8alE=", "owner": "moq-dev", "repo": "quest", - "rev": "4b07dd37466d6fe6af5c9de3d6f1efd7f693aba7", + "rev": "7fe979312b792108a8911a0b38dfc3fd2bb38774", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index c95069ebe..d45fdc5c7 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ # The quest CLI, which also serves the quest guide and skills the stubs in # .claude/skills call. Bump the rev to upgrade them. quest = { - url = "github:moq-dev/quest/6a18b8a815c2d15d37d7433a619f961ec5a07165"; + url = "github:moq-dev/quest"; inputs.nixpkgs.follows = "nixpkgs"; inputs.flake-utils.follows = "flake-utils"; }; diff --git a/quest/README.md b/quest/README.md index a4adeb112..a250e3ad2 100644 --- a/quest/README.md +++ b/quest/README.md @@ -33,11 +33,3 @@ Decided with the maintainer on 2026-10-23, when rust2 was planned from moq - The first quest that adds a crate also adds the Cargo workspace (moq's workspace lints, including a reason on every suppression) and the cargo steps of `just check`. - -## Required - -- [m0: immediate priorities](/quest/m0/README.md) - urgent fixes, the checks' cost, and a green nightly -- [m1: consumers waiting](/quest/m1/README.md) - the exporter moq can pin and switch its bindings to -- [m2: research](/quest/m2/README.md) - rust2-wasm as the browser route, and the TypeScript translator that has to beat it -- [m3: deferred](/quest/m3/README.md) - upstream's build-speed levers, the translator features that wait on the gate, and binding targets planned ahead of a consumer -- [m4: long-term research](/quest/m4/README.md) - ideas no consumer needs yet, such as a rustc and cargo fork diff --git a/quest/m0/README.md b/quest/m0/README.md index 492dd18a0..90aeec3a5 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -4,8 +4,3 @@ Urgent fixes to anything a consumer already depends on, and what every agent pays for on each run: the checks, a red nightly, and code no consumer uses. - -## Required - -- [Checks at moq's cost](/quest/m0/checks/README.md) - `just ci` selects by the diff, builds warm, and runs the differential optimized, with a nightly full `just gate` -- [The nightly passes](/quest/m0/nightly-green.md) - red since 2026-10-29: the wasm-bindgen fixture's NaN, Kotlin on Android API 35, and `just ffi moq` diff --git a/quest/m0/checks/README.md b/quest/m0/checks/README.md index e5120c6eb..7b4d1283b 100644 --- a/quest/m0/checks/README.md +++ b/quest/m0/checks/README.md @@ -16,7 +16,3 @@ stays the rule, and costs less now that it selects by the diff keep their rules. All of it is m0, since every agent pays the cost now. Each child reports its CPU saved, cold and warm, against `origin/main`. - -## Required - -- [A warm gate](/quest/m0/checks/cache.md) - the land gate builds through mbx, as moq's does diff --git a/quest/m1/README.md b/quest/m1/README.md index cebfc58d5..472a7fe40 100644 --- a/quest/m1/README.md +++ b/quest/m1/README.md @@ -18,7 +18,3 @@ Decided 2026-11-02 (maintainer, moq's /quest-unblock): the fork is not published Decided with the maintainer on 2026-11-09, in the quest audit: ✅ the fork is deleted now, since moq never builds on it and its only consumers here were the binding benchmark's baseline and nightly jobs. Rejected: keeping it until moq switches; keeping it as is. - -## Required - -- [Exporter](/quest/m1/ffi-export/README.md) - moq can pin an exporter that exports its crates' `pub` API in every language it ships diff --git a/quest/m1/ffi-export/README.md b/quest/m1/ffi-export/README.md index 9d0305ae6..36a8d34b5 100644 --- a/quest/m1/ffi-export/README.md +++ b/quest/m1/ffi-export/README.md @@ -86,16 +86,3 @@ arenas keep under Go's lent `Bytes` is the consumer's to fix with its global all Decided with the maintainer on 2026-11-04: the exporter is configless, with opinionated names and defaults, and fails the export on a public item it cannot export. - -## Required - -- [Every public item exports](/quest/m1/ffi-export/refusals/README.md) - the census lists no refusals and `ffi.toml` is deleted, so the exporter reads no config -- [Share a binding across targets](/quest/m1/ffi-export/target.md) - one Kotlin, Dart, Go, or Swift binding serves every target moq ships it to, though their `cfg`-gated items differ -- [Lossless binding types](/quest/m1/ffi-export/lossless.md) - durations, addresses, paths, text, and integers cross exactly, with checked conversions to the idiomatic types -- [Failed checks raise](/quest/m1/ffi-export/checks-raise.md) - a failed borrow, move, or close check is the language's own error from one accounting, and only a panic aborts -- [Types that are not Send export](/quest/m1/ffi-export/not-send.md) - a `!Send` object or future is checked by thread, with an owner thread where a language has none -- [No name clash fails an export](/quest/m1/ffi-export/names.md) - every generator names every item by rule, so no error tells a crate to rename or exclude one -- [The glue builds what the export checked](/quest/m1/ffi-export/reproducible.md) - the generated crate carries its lockfile, and a discriminant or nightly-only item it cannot build is refused at export -- [Swift handles are non-copyable](/quest/m1/ffi-export/swift-noncopyable.md) - a call on a moved handle or a lent handle kept past its call is a Swift compile error, not a trap -- [C++ checks ownership at compile time](/quest/m1/ffi-export/cpp-attributes.md) - typestate and lifetime attributes and `api::borrow` make Clang refuse what the run-time checks catch -- [The exporter on the binding benchmark](/quest/m1/ffi-export/bench.md) - committed call, throughput, and size numbers per language against the Rust floor, whose report plans the speed work diff --git a/quest/m1/ffi-export/refusals/README.md b/quest/m1/ffi-export/refusals/README.md index d50d5f67c..bb1096e0e 100644 --- a/quest/m1/ffi-export/refusals/README.md +++ b/quest/m1/ffi-export/refusals/README.md @@ -73,12 +73,3 @@ only because a type they name is refused, and clear with it. After the stand-in items, 41 of them in moq-tokio, and 6 types. Public API: the exporter's command line and the C API of every item that exports. - -## Required - -- [The stand-in exports only moq-tokio's session side](/quest/m1/ffi-export/refusals/narrow-standin.md) - `just ffi standin` names the session items moq-ffi ships in place of `pub use ::moq_tokio::*;` -- [Futures and kept closures as parameters export](/quest/m1/ffi-export/refusals/generics.md) - `clock::timeout`'s future, `clock::drive`'s kept closure, and `mp4::repair`'s seekable reader cross from C -- [Standard and common types export by role](/quest/m1/ffi-export/refusals/std-types.md) - `Filter`, serde_json's map iterators, `Instant`, and tracing's levels, once their maintainer decisions land -- [Returned wakers and contexts export](/quest/m1/ffi-export/refusals/poll.md) - kio's `Waiter::waker` and `Waiter::context`, once a function returning `Poll` exports as a future -- [Small shapes export](/quest/m1/ffi-export/refusals/small-shapes.md) - `u128`, arrays, const generics, unit and `Result` off a return, `!`, empty enums, and what is not `Send` -- [Bump the moq pin past its re-export and reachability fixes](/quest/m1/ffi-export/refusals/moq-pin.md) - the census has no whole-crate re-export refusal and no unreachable type of moq's own diff --git a/quest/m2/README.md b/quest/m2/README.md index 2f65eea47..ec4ba4635 100644 --- a/quest/m2/README.md +++ b/quest/m2/README.md @@ -26,9 +26,3 @@ from the browsers goes to the browsers. The fork's feature quests folded into the [exporter](/quest/m1/ffi-export/README.md); [m1](/quest/m1/README.md#plan) records why. - -## Required - -- [rust2-wasm](/quest/m2/wasm/README.md) - a crate's `pub` API in the browser through the exporter's wasm32 target, and the gate the translator has to pass -- [Translate moq-net's model to TypeScript](/quest/m2/ts-model/README.md) - the model translates with kio and moq-pattern, for the gate to compare -- [Waiting: Swift 6.4 in nixpkgs-unstable](/quest/m2/swift-arm.md) - rust2-ffi stops skipping its Swift on aarch64-linux diff --git a/quest/m2/wasm/README.md b/quest/m2/wasm/README.md index 72378fb4b..c6c3f9488 100644 --- a/quest/m2/wasm/README.md +++ b/quest/m2/wasm/README.md @@ -55,8 +55,3 @@ Why this shape, from the audit's survey of 2026's tools: moq's [`rs2ts-js`](https://github.com/moq-dev/moq/blob/main/quest/m5/rs2ts-js.md) and [`rs2ts-wasm2js`](https://github.com/moq-dev/moq/blob/main/quest/m5/rs2ts-wasm2js.md) still record the superseded decision; they are moq's tree's to update. - -## Required - -- [The exporter's web target](/quest/m2/wasm/backend.md) - the glue crate builds for wasm32 with a generated TypeScript binding over web APIs, proven on the api fixture -- [Every route on the browser benchmark](/quest/m2/wasm/routes.md) - `just ts bench` runs rust2-wasm's export and a `wasm2js` control beside the translation diff --git a/quest/m3/README.md b/quest/m3/README.md index 717ffe8a7..5dc03f573 100644 --- a/quest/m3/README.md +++ b/quest/m3/README.md @@ -51,17 +51,3 @@ Rejected: an unsafe std gap with no consumer becoming its own quest, as ([#647](https://github.com/moq-dev/rust2/pull/647)), or as `Vec::from_raw_parts`'s adopted storage did ([#635](https://github.com/moq-dev/rust2/pull/635)); and a second, byte-backed memory model for values whose address is reinterpreted, without a consumer. - -## Required - -- [Sessions on sans-IO QUIC](/quest/m3/session-quic.md) - bindings move UDP datagrams and drive the session's poll themselves, over moq's runtime-free QUIC driver once it lands -- [C# and Unity bindings](/quest/m3/csharp.md) - a C# generator over the C ABI that runs under .NET and Unity's IL2CPP -- [A Node-API addon](/quest/m3/node.md) - a native Node binding, kept only if it beats rust2-wasm and `node:ffi` -- [React Native bindings](/quest/m3/react-native.md) - a JSI module over the generated C++ header -- [A WASI target](/quest/m3/wasi.md) - the exporter's API as a WASI module or component for hosts with no JavaScript -- [Retrial Cranelift on moq's tests](/quest/m3/cranelift-unwind.md) - waits on upstream: moq's tests pass under Cranelift, so its CI can weigh it again -- [Relink without rebuilding](/quest/m3/relink.md) - measure upstream's skip of dependency-only rebuilds on moq's edits once it reaches nightly -- [Waiting: drop the lang fixture's mul_add allowance](/quest/m3/ts-fma-allowance.md) - the differential fails on any `mul_add` difference again once wasm32's `fma` rounds exactly -- [Waiting: type-check in process with tsrs](/quest/m3/ts-tsrs.md) - rust2-ts checks bindings through tsrs instead of `tsc` once it is a stable library -- [rust2-ts with no ts.toml](/quest/m3/ts-configless.md) - a crate's whole `pub` API translates with no config and no bound items -- [Browser APIs through wasm-bindgen](/quest/m3/ts-wasm-bindgen/README.md) - web-sys and js-sys imports become direct JS calls, so idiomatic crates such as web-rs's web-codecs translate as stock crates diff --git a/quest/m4/README.md b/quest/m4/README.md index f899a8193..e44efdf3c 100644 --- a/quest/m4/README.md +++ b/quest/m4/README.md @@ -25,9 +25,3 @@ at moq's types, closures included, so it would have to compile std too. Levers that need no new frontend reach its best case: ra-jit already applies the moq-net body edits it serves in under half a second, and Cranelift cuts a clean build's retired instructions by 16%. - -## Required - -- [Bench TPDE on moq](/quest/m4/tpde.md) - what TPDE cuts from moq's clean build and non-incremental edit; waits on `-Zllvm-tpde` reaching a nightly -- [Waiting: a rustc and cargo fork](/quest/m4/fork.md) - the evidence ledger for carrying a fork; condition: enough measured reasons to pay for one -- [moq in pure Go](/quest/m4/go/README.md) - rust2-go translating moq-net, with no cgo, fast enough to replace the cgo bindings for Go users; parked until a consumer needs moq in pure Go diff --git a/quest/m4/go/README.md b/quest/m4/go/README.md index 84a82dd13..e43fb41b3 100644 --- a/quest/m4/go/README.md +++ b/quest/m4/go/README.md @@ -44,11 +44,3 @@ moq's codec held to rust2-ts's bar: 35,273 codec cases and 124,193 integer cases native Rust, panics included. It runs 2 to 113 times slower than cgo on batched loops, and beats it only on a single short call, where cgo's crossing dominates. Stripped, it adds 324 KB to a Go binary where cgo adds 1.15 MB and a libc dependency. - -## Required - -- [moq-net beyond the codec](/quest/m4/go/coverage.md) - `Drop`, floats, 128-bit integers, trait objects, and collections, so moq-net translates whole -- [Exported names off the runtime's](/quest/m4/go/runtime-names.md) - a crate's own `Result` or `Formatter` exports beside the runtime's -- [A Go API for exported enums](/quest/m4/go/enums.md) - Go callers in another package build, match, and pass a `pub enum`, pinned by an external test package -- [Trait-impl methods](/quest/m4/go/trait-impls.md) - a `pub` type's `Display`, `Debug`, `From`, and other impls callable from Go by a naming rule -- [Methods through a specialized alias](/quest/m4/go/alias-methods.md) - a private generic type's methods exported through `pub type Byte = Value` instead of refused