You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
t27o golden functions (step 4 of #9000), measured first: hand lines in converted fns of partly converting files, and which can move without changing a caller #11159
Measure the per-function golden prize: the hand-written Rust lines that sit in functions t27o already converts, inside files that only partly convert, and which of those functions could be replaced by a generated function mounted into the same file without changing a caller. This is step 4 of #9000 for the files that do not convert whole.
Why
The first golden port (#11157, bootstrap/src/host/bitmask.rs, +1/-171 hand lines) was the only file in the t27 repository that converts whole; A7's analysis (#11149) found 3,006 hand lines in 80 whole files across five repositories (0.69% of the swept lines), most of them stubs or in trios crates the workspace does not build. The sweep of 2026-10-20 converts 632 of 7,038 fns in the t27 tree and 1,824 of 19,392 over all five. Those converted fns sit in files that also hold refused fns, so the file cannot be replaced, but the function can: its body moves into a spec, the file mounts the generated function with #[path], and the hand lines are deleted. Nobody has counted those lines or checked how many have callers whose types would change.
Boundary
docs/now/2026-10-20-golden-functions.md
User Scenarios
Given a partly converting file, when the analysis runs, then it lists each converted fn with its hand-written line span, its callers in the same file and in other files, and the type difference gen-rust would introduce.
Given a converted fn called only by other converted fns of the same file, when it is ranked, then the row says the whole group can move together.
Given a converted fn whose signature changes under gen-rust, when it is ranked, then it is marked with the callers it would break.
Requirements
FR-001: The table MUST count hand-written lines the way the own-language gate does, name the sweep driver and the commits, and exclude generated, vendored and test-only paths with the reason.
FR-002: Each ranked fn MUST be checked for valid output (t27c test-report of its converted spec) and for the signature gen-rust writes against the original.
FR-003: This issue is analysis only: no Rust is deleted and no spec is added before the table is on the issue.
Success Criteria
The table is posted on this issue and held in docs/now/2026-10-20-golden-functions.md, with at least 30 rows ranked by hand-written lines.
It names the first group of fns that deletes at least 200 lines of hand-written Rust with every caller unchanged, or states in numbers why none does.
Measured, analysis only. Same content as docs/now/2026-10-20-golden-functions.md in draft PR #11160 (head 22a43fb), cut to the answer, the scale, the reasons, the first bundle, the top bundles and the top 120 of the 187 ranked rows; the rest, the signature appendix and the per-file list of every converted fn are in the document.
valid-output: unchecked on 44 of the 187 rows (45 of the 223 specs): t27c test-report was stopped when the shared Mac ran low on disk under load; those rows still carry the rustc compile of their gen-rust output. The unchecked rows are 30 trios rows and 14 999-multibots-telegraf rows; every t27 row was checked (all 93 t27 specs).
MOVABLE (same name, same types, every caller unchanged): 146 fns, 1,375 hand lines (0.32% of the swept lines). MOVABLE-WITH-CALLER-CHANGE: 54 fns, 406 lines.
NOT-NOW: 617 fns, 4,774 lines (73% of the hand lines in converted fns).
Where the MOVABLE lines are: t27 workspace crates (bootstrap, cli/*) 217 lines in 27 fns; t27 rings/ crates 510 in 38; t27 other crates 108 in 9; trios workspace crates 421 in 49;
trios crates not built 110 in 14; the three other repositories 9 in 9. Methods never move without a caller change, and a fn that names a hand-file type cannot move before the type does.
Net, if every MOVABLE bundle above 5 lines were ported with a 5-line mount each: 1036 lines out of hand files in 52 files (31 of them under 20 lines); the 40-line-per-file and 80-per-PR budget is never the limit, the fixed cost of one spec, one generated file, one seal and one ledger row per bundle is.
Biggest call-connected group: exp_f64 + apply_softmax of rings/ring-092-rust/src/lib.rs, 93 lines. No call-connected group reaches 200.
First MOVABLE bundle that deletes at least 200 hand lines with every caller unchanged: the 7 MOVABLE fns of rings/ring-092-rust/src/lib.rs, 201 hand lines
(abs_f64 9, exp_f64 45, apply_softmax 48, cache_kv 20, compute_scores 38, weighted_values 30, identity_witness 11), one file, one mount, five call-connected groups that do not call each other.
Plainly: 201 lines deleted against a 5-line mount added, net -196; no other bundle exceeds 88 lines (ring-093 88, ffi 78, ring-099 46, cli/tri/src/fpga.rs 45). Section "First bundle" has the evidence.
In the crates the t27 workspace builds the prize is small: the largest MOVABLE bundle is cli/tri/src/fpga.rs with 45 lines; all 27 MOVABLE fns of bootstrap and cli/* hold 217 lines.
Valid output: 178 of the 223 specs were run through t27c test-report (one spec per file, a fresh ZIG_LOCAL_CACHE_DIR deleted after each run): 100 specs hold tests (377 tests, 377 pass, 0 FAIL, 57 vacuous passes);
78 specs hold no test (their file has none), so the report has nothing to run for them and those rows lean on the rustc compile of the gen-rust output. 45 specs were NOT checked
(stopped when the shared Mac ran low on disk under load): 45 files, the 44 rows marked valid-output: unchecked below (of 187 rows).
Every row's gen-rust output was also compiled with rustc --crate-type lib (stub fns removed; the ring crates also under #![no_std]).
Scale (partly converting files only; fns and lines are converted non-test fns)
area
what it is
files
converted fns
hand lines
cfg(test) lines in those files
MOVABLE fns / lines
CALLER-CHANGE fns / lines
NOT-NOW fns / lines
W27
t27 workspace crates (bootstrap, cli/*)
63
295
2195
28194
27 / 217
29 / 229
239 / 1749
R27
t27 rings/ (standalone crates built by rings-rust.yml)
17
142
1403
3907
38 / 510
1 / 10
103 / 883
O27
t27 other crates (ffi, bindings, contrib, backend; not built by the workspace)
6
23
148
141
9 / 108
1 / 9
13 / 31
WT
trios crates built by its workspace (88 members + path dependencies)
82
242
1864
8743
49 / 421
9 / 106
184 / 1337
NT
trios crates the workspace does not build
40
79
712
3450
14 / 110
9 / 43
56 / 559
OT
trinity, trinity-fpga, 999-multibots-telegraf (no workspace build checked)
15
36
233
429
9 / 9
5 / 9
22 / 215
all
223
817
6555
44864
146 / 1375
54 / 406
617 / 4774
Why the rest cannot move now (NOT-NOW, by first reason)
reason
fns
hand lines
ty-: method of, or signature names, a hand-file type with derives gen-rust drops (PartialEq, Eq, Hash, Default, serde ...): the type cannot move without breaking users
340
2663
ty+: method of, or signature names, a hand-file type whose derives gen-rust keeps (Debug, Clone, Copy): the type must move first
137
952
bad: gen-rust output does not compile (or calls a fn / needs a const that does not)
68
736
trait: method of a trait impl (callers dispatch through the trait)
38
189
attr: cfg, proc-macro or ABI attribute, or unsafe/extern
20
146
constctx: const fn called in a const context (gen-rust writes a plain fn)
13
76
dep: calls a NOT-NOW fn
1
12
Per area (fns / lines): W27: ty+ 56/367, ty- 119/836, bad 43/400, constctx 9/59, trait 11/75, dep 1/12; R27: ty+ 14/73, ty- 71/694, bad 11/92, constctx 3/12, trait 4/12; O27: ty- 10/18, attr 2/10, trait 1/3; WT: ty+ 54/416, ty- 93/632, bad 5/88, constctx 1/5, attr 16/128, trait 15/68; NT: ty+ 11/92, ty- 34/320, bad 7/128, trait 4/19; OT: ty+ 2/4, ty- 13/163, bad 2/28, attr 2/8, trait 3/12
465 of the 617 NOT-NOW fns (3441 lines) are methods: gen-rust turns Type::method(&self, ..) into the free fn Type_method(self_, ..) and writes the type again in the generated module, so
every method and every fn that takes or returns a hand-file type needs the type moved first; types that derive PartialEq, Eq, Hash, Default or serde
lose those derives (gen-rust writes Debug, Clone, Copy), which is the second row. A type-move PR is the next step for the ty+ fns, not a function move.
&str parameters become &[u8] when the spec slices (56 free fns) or &'static str (9): the call sites need .as_bytes() or a literal, which is why those fns are CALLER-CHANGE.
gen-rust output that does not compile: array consts (pub const X: Vec<u64> = [..], Vec<const u8>), const-evaluated calls (E0015), Option<T> indexing, &str iteration,
text indexing; these are gen-rust and converter defects, listed by rustc message in the appendix.
First bundle: rings/ring-092-rust/src/lib.rs (7 fns, 201 hand lines)
Crate ring-092-rust (package name), rings/ring-092-rust: in the root Cargo.tomlexclude list, built standalone by .github/workflows/rings-rust.yml (Rust 1.83, continue-on-error).
The names apply_softmax, weighted_values, compute_scores and cache_kv occur in no other .rs file of the five repositories; identity_witness (17 rings), exp_f64 (ring-093) and abs_f64 (ring-093, compiler.rs) are defined again in independent crates that do not depend on ring-092; #![no_std], #![forbid(unsafe_code)], #![deny(missing_docs)].
Callers: all of them are inside the file: the 28 #[test] fns of its #[cfg(test)] module (21 of them converted into the spec as tests) and, between the fns, apply_softmax -> exp_f64
and identity_witness -> abs_f64. No refused fn calls any of the 7. Call-connected groups: {exp_f64, apply_softmax}, {abs_f64, identity_witness}, {cache_kv}, {compute_scores}, {weighted_values}.
gen-rust signatures: identical names and types except the three fns that take &[f64], which gen-rust writes impl AsRef<[f64]> (every call form of the file compiles; &[] literals would need an annotation).
The consts the fns use (NUM_HEADS, HEAD_DIM, EMBED_DIM, CONTEXT_LEN, SACRED_SCALE) also convert and compile, but this count does not delete them from the hand file.
What was built to check it (scratch only, not committed): a group-only spec of the 7 fns, its 16 consts and the 21 tests that call nothing else; t27c gen-rust of it (198 lines);
a copy of the crate with the 7 fn spans deleted and a 5-line mount (#[path], #[allow(missing_docs, ..)], mod golden;, pub use golden::{5 pub fns};, use golden::{abs_f64, exp_f64};). rustc --test of the original: 28 passed, 0 failed; of the mounted copy: 28 passed, 0 failed; 201 lines out, 5 in (761 -> 565 lines). abs_f64 and exp_f64 are used only by tests and by
generated code in the hand file, so the use line wants #[cfg(test)] in crates with deny(warnings) (rings 094-099); ring-092 only warns "unused imports".
Differential run of the hand fns against the generated ones, same inputs, results compared by bit pattern (NaN equal to NaN), or both must panic: exp_f64 and abs_f64 over
4,000,022 inputs each (specials, subnormals, +-inf, NaN, the 700 cut-off, random bit patterns, uniform and wide ranges); apply_softmax 300,000 arrays and seq_len values including out of range; cache_kv 200,000; compute_scores and weighted_values 30,000 each, with short buffers and out-of-range positions; identity_witness. 8,560,045 comparisons, 0 disagreements, 180,769 cases where
both panicked (out-of-contract buffers), at -C opt-level=0 (overflow checks on), -C opt-level=3 -C overflow-checks=off and -C opt-level=3 -C overflow-checks=on.
python3 -I tools/dupe_scan.py --like on the group spec: "nothing in this file is written elsewhere" (no byte-identical body). But specs/nn/attention.t27 already declares cache_kv, compute_scores, apply_softmax, weighted_values and ternary_matmul, with a different argument order for compute_scores and weighted_values; the crate says it mirrors that spec. A port must reconcile with it first (as the
six specs/port/ files do in t27o golden PRs (step 4 of #9000), measured first: the 85 Rust files that convert whole, ranked by hand lines a port would delete #11149), or it adds a second spec of the same kernel.
Shape of the pull request (not done): delete the 7 spans (-201), add the mount (+5), add the spec and the file t27c gen-rust writes under a generated root (for example gen/rust/rings/, mounted as #[path = "../../../gen/rust/rings/ring092_attention.rs"]), a seal and a t27b ledger row. The own-language budget sees +5 / -201 in one hand file.
Bundles: the MOVABLE fns of one file, one mount per file (top 25 of 74 files)
Not all of a bundle's fns call each other: "groups" is the number of call-connected groups in it. "net" is lines minus a 5-line mount (3 if the mount attributes share one line, as in #11157).
Ranked table: every MOVABLE or MOVABLE-WITH-CALLER-CHANGE group (187 rows), ranked by hand lines
Legend. area: W27 t27 workspace crates, R27 t27 rings/, O27 other t27 crates, WT trios workspace crates, NT trios crates not built, OT trinity / trinity-fpga / 999-multibots-telegraf (repo named). A group is the
call-connected set of converted fns of one file that call only each other (a lone fn is a group of one); a group is MOVABLE only if every fn in it is. "callers in file": conv = another converted fn,
refused = a fn the converter refuses (it keeps calling the moved fn by name through a use, so it blocks only when a signature changes), test = a #[test] or helper in the #[cfg(test)] module,
other = a const/static initializer. "callers elsewhere": files outside the row that name the fn through its module path, an import or the crate name (checked by hand for every MOVABLE row that had a hit).
"gen-rust vs original": differences in the signature gen-rust writes; const fn -> fn matters only to a const context (checked: none for a MOVABLE row); impl AsRef widens. "valid output": tr P/T vac V is t27c test-report of the file's converted spec (P passes of T tests, V vacuous passes); "gen-rust compiles" is rustc --crate-type lib of the generated file with the refused stubs removed.
Rows 121-187, Appendix A (gen-rust signature differences) and Appendix B (every converted fn by file, with its verdict code) are in the document.
Not run
t27c test-report of 45 specs (30 trios files, 15 files of trinity, trinity-fpga and 999-multibots-telegraf): stopped when the shared Mac ran low on disk under load. Their rows say valid-output: unchecked.
Their gen-rust output was still compiled with rustc.
tri t27o --check (the oracle replay) on any file: not run. The only behavioural comparison is the differential run of the ring-092 bundle above; no other group was compared against its hand fns.
No cargo build, cargo check or cargo test of any crate. Callers come from a token index of every .rs file of the five repositories (comments and strings blanked), with module-path, import and crate-name matching,
then git grep by hand for every MOVABLE row that had a hit elsewhere; a caller that reaches a fn through a glob import and another name, or through a macro, would be missed. Only the ring-092 bundle was mounted and
compiled (with rustc, the crate has no dependency).
"gen-rust compiles" is a library compile of the generated file with the refused stubs removed, repeated after removing every item that failed; it does not prove the converted body equals the hand body.
No seal, ledger row, t27b ledger edit, own-language gate run or dupe_scan over any spec but the ring-092 group spec; no spec was added to the repository.
Method rows were not checked for the type-move variant (moving a type with its fns): the ty+ rows are the candidates for it.
Activity
gHashTag commentedon Oct 19, 2026
Measured, analysis only. Same content as
docs/now/2026-10-20-golden-functions.mdin draft PR #11160 (head 22a43fb), cut to the answer, the scale, the reasons, the first bundle, the top bundles and the top 120 of the 187 ranked rows; the rest, the signature appendix and the per-file list of every converted fn are in the document.valid-output: unchecked on 44 of the 187 rows (45 of the 223 specs):
t27c test-reportwas stopped when the shared Mac ran low on disk under load; those rows still carry therustccompile of their gen-rust output. The unchecked rows are 30 trios rows and 14 999-multibots-telegraf rows; every t27 row was checked (all 93 t27 specs).Answer
#[cfg(test)]; 44,864#[cfg(test)]lines sit in the same files).That is 1.51% of the 435,491 physical lines lane A4 swept (the denominator of t27o golden PRs (step 4 of #9000), measured first: the 85 Rust files that convert whole, ranked by hand lines a port would delete #11149), where the whole files of t27o golden PRs (step 4 of #9000), measured first: the 85 Rust files that convert whole, ranked by hand lines a port would delete #11149 were 0.69%.
NOT-NOW: 617 fns, 4,774 lines (73% of the hand lines in converted fns).
rings/crates 510 in 38; t27 other crates 108 in 9; trios workspace crates 421 in 49;trios crates not built 110 in 14; the three other repositories 9 in 9. Methods never move without a caller change, and a fn that names a hand-file type cannot move before the type does.
exp_f64+apply_softmaxofrings/ring-092-rust/src/lib.rs, 93 lines. No call-connected group reaches 200.rings/ring-092-rust/src/lib.rs, 201 hand lines(
abs_f649,exp_f6445,apply_softmax48,cache_kv20,compute_scores38,weighted_values30,identity_witness11), one file, one mount, five call-connected groups that do not call each other.Plainly: 201 lines deleted against a 5-line mount added, net -196; no other bundle exceeds 88 lines (ring-093 88, ffi 78, ring-099 46, cli/tri/src/fpga.rs 45). Section "First bundle" has the evidence.
cli/tri/src/fpga.rswith 45 lines; all 27 MOVABLE fns of bootstrap and cli/* hold 217 lines.t27c test-report(one spec per file, a fresh ZIG_LOCAL_CACHE_DIR deleted after each run): 100 specs hold tests (377 tests, 377 pass, 0 FAIL, 57 vacuous passes);78 specs hold no test (their file has none), so the report has nothing to run for them and those rows lean on the rustc compile of the gen-rust output. 45 specs were NOT checked
(stopped when the shared Mac ran low on disk under load): 45 files, the 44 rows marked
valid-output: uncheckedbelow (of 187 rows).Every row's gen-rust output was also compiled with
rustc --crate-type lib(stub fns removed; the ring crates also under#![no_std]).Scale (partly converting files only; fns and lines are converted non-test fns)
Why the rest cannot move now (NOT-NOW, by first reason)
Per area (fns / lines): W27: ty+ 56/367, ty- 119/836, bad 43/400, constctx 9/59, trait 11/75, dep 1/12; R27: ty+ 14/73, ty- 71/694, bad 11/92, constctx 3/12, trait 4/12; O27: ty- 10/18, attr 2/10, trait 1/3; WT: ty+ 54/416, ty- 93/632, bad 5/88, constctx 1/5, attr 16/128, trait 15/68; NT: ty+ 11/92, ty- 34/320, bad 7/128, trait 4/19; OT: ty+ 2/4, ty- 13/163, bad 2/28, attr 2/8, trait 3/12
Type::method(&self, ..)into the free fnType_method(self_, ..)and writes the type again in the generated module, soevery method and every fn that takes or returns a hand-file type needs the type moved first; types that derive
PartialEq,Eq,Hash,Defaultor serdelose those derives (gen-rust writes
Debug, Clone, Copy), which is the second row. A type-move PR is the next step for thety+fns, not a function move.&strparameters become&[u8]when the spec slices (56 free fns) or&'static str(9): the call sites need.as_bytes()or a literal, which is why those fns are CALLER-CHANGE.pub const X: Vec<u64> = [..],Vec<const u8>), const-evaluated calls (E0015),Option<T>indexing,&striteration,text indexing; these are gen-rust and converter defects, listed by rustc message in the appendix.
First bundle: rings/ring-092-rust/src/lib.rs (7 fns, 201 hand lines)
ring-092-rust(package name),rings/ring-092-rust: in the rootCargo.tomlexcludelist, built standalone by.github/workflows/rings-rust.yml(Rust 1.83,continue-on-error).The names
apply_softmax,weighted_values,compute_scoresandcache_kvoccur in no other.rsfile of the five repositories;identity_witness(17 rings),exp_f64(ring-093) andabs_f64(ring-093,compiler.rs) are defined again in independent crates that do not depend on ring-092;#![no_std],#![forbid(unsafe_code)],#![deny(missing_docs)].#[test]fns of its#[cfg(test)]module (21 of them converted into the spec as tests) and, between the fns,apply_softmax->exp_f64and
identity_witness->abs_f64. No refused fn calls any of the 7. Call-connected groups: {exp_f64, apply_softmax}, {abs_f64, identity_witness}, {cache_kv}, {compute_scores}, {weighted_values}.&[f64], which gen-rust writesimpl AsRef<[f64]>(every call form of the file compiles;&[]literals would need an annotation).The consts the fns use (
NUM_HEADS,HEAD_DIM,EMBED_DIM,CONTEXT_LEN,SACRED_SCALE) also convert and compile, but this count does not delete them from the hand file.t27c gen-rustof it (198 lines);a copy of the crate with the 7 fn spans deleted and a 5-line mount (
#[path],#[allow(missing_docs, ..)],mod golden;,pub use golden::{5 pub fns};,use golden::{abs_f64, exp_f64};).rustc --testof the original: 28 passed, 0 failed; of the mounted copy: 28 passed, 0 failed; 201 lines out, 5 in (761 -> 565 lines).abs_f64andexp_f64are used only by tests and bygenerated code in the hand file, so the
useline wants#[cfg(test)]in crates withdeny(warnings)(rings 094-099); ring-092 only warns "unused imports".exp_f64andabs_f64over4,000,022 inputs each (specials, subnormals, +-inf, NaN, the 700 cut-off, random bit patterns, uniform and wide ranges);
apply_softmax300,000 arrays andseq_lenvalues including out of range;cache_kv200,000;compute_scoresandweighted_values30,000 each, with short buffers and out-of-range positions;identity_witness. 8,560,045 comparisons, 0 disagreements, 180,769 cases whereboth panicked (out-of-contract buffers), at
-C opt-level=0(overflow checks on),-C opt-level=3 -C overflow-checks=offand-C opt-level=3 -C overflow-checks=on.python3 -I tools/dupe_scan.py --likeon the group spec: "nothing in this file is written elsewhere" (no byte-identical body). Butspecs/nn/attention.t27already declarescache_kv,compute_scores,apply_softmax,weighted_valuesandternary_matmul, with a different argument order forcompute_scoresandweighted_values; the crate says it mirrors that spec. A port must reconcile with it first (as thesix
specs/port/files do in t27o golden PRs (step 4 of #9000), measured first: the 85 Rust files that convert whole, ranked by hand lines a port would delete #11149), or it adds a second spec of the same kernel.t27c gen-rustwrites under a generated root (for examplegen/rust/rings/, mounted as#[path = "../../../gen/rust/rings/ring092_attention.rs"]), a seal and a t27b ledger row. The own-language budget sees +5 / -201 in one hand file.Bundles: the MOVABLE fns of one file, one mount per file (top 25 of 74 files)
Not all of a bundle's fns call each other: "groups" is the number of call-connected groups in it. "net" is lines minus a 5-line mount (3 if the mount attributes share one line, as in #11157).
Ranked table: every MOVABLE or MOVABLE-WITH-CALLER-CHANGE group (187 rows), ranked by hand lines
Legend. area: W27 t27 workspace crates, R27 t27 rings/, O27 other t27 crates, WT trios workspace crates, NT trios crates not built, OT trinity / trinity-fpga / 999-multibots-telegraf (repo named). A group is the
call-connected set of converted fns of one file that call only each other (a lone fn is a group of one); a group is MOVABLE only if every fn in it is. "callers in file": conv = another converted fn,
refused = a fn the converter refuses (it keeps calling the moved fn by name through a
use, so it blocks only when a signature changes), test = a#[test]or helper in the#[cfg(test)]module,other = a const/static initializer. "callers elsewhere": files outside the row that name the fn through its module path, an import or the crate name (checked by hand for every MOVABLE row that had a hit).
"gen-rust vs original": differences in the signature gen-rust writes;
const fn -> fnmatters only to a const context (checked: none for a MOVABLE row);impl AsRefwidens. "valid output":tr P/T vac Vist27c test-reportof the file's converted spec (P passes of T tests, V vacuous passes); "gen-rust compiles" isrustc --crate-type libof the generated file with the refused stubs removed.Rows 121-187, Appendix A (gen-rust signature differences) and Appendix B (every converted fn by file, with its verdict code) are in the document.
Not run
t27c test-reportof 45 specs (30 trios files, 15 files of trinity, trinity-fpga and 999-multibots-telegraf): stopped when the shared Mac ran low on disk under load. Their rows sayvalid-output: unchecked.Their gen-rust output was still compiled with
rustc.tri t27o --check(the oracle replay) on any file: not run. The only behavioural comparison is the differential run of the ring-092 bundle above; no other group was compared against its hand fns.cargo build,cargo checkorcargo testof any crate. Callers come from a token index of every.rsfile of the five repositories (comments and strings blanked), with module-path, import and crate-name matching,then
git grepby hand for every MOVABLE row that had a hit elsewhere; a caller that reaches a fn through a glob import and another name, or through a macro, would be missed. Only the ring-092 bundle was mounted andcompiled (with
rustc, the crate has no dependency).t27bledger edit, own-language gate run ordupe_scanover any spec but the ring-092 group spec; no spec was added to the repository.ty+rows are the candidates for it.docs(t27o): RFC for heap-free collections, owned strings and inlined …