What cost the most: reading the winnow-grammar source to see how frames are made: push_rule, the live rules stack, .item(n) in rt.rs, the code for rule calls, extern calls and template inlining. That took about 12 of my ~20 turns. The key fact, that __nikaia_list gets no frame, only showed up once I ran the probe and read the generated probe.rs. My first probe run failed because I cut the brief’s lines one off and kept the code fence: one wasted turn.
rule X<T>(item: Rule<T>)) are inlined by the macro and push no frame.item N frames are pushed only for Backtrack errors, never for Cut (rt.rs ~1005/1082/1248).members[S] failure is a Cut.The brief’s suggested route (“push a marked segment frame [1]”) rests on frames that can carry a run-time index, and there are none. The brief also said in item N “are not the list index” without saying they vanish on Cut.
lower-std or tests, which was right because nothing could be built.