Skip to content

feat(cybergym): say when the lane is IDLE rather than broken - #240

Merged
ai-hpc merged 1 commit into
mainfrom
ai-hpc/name-the-idle-lane
Sep 10, 2026
Merged

ai-hpc merged 1 commit into
mainfrom
ai-hpc/name-the-idle-lane

Conversation

@ai-hpc

@ai-hpc ai-hpc commented Sep 10, 2026

Copy link
Copy Markdown
Member

Prerequisite for #147, and the part of it that is safe to land now. No weights change.

The problem

An empty CyberGym vector had one name for two different events:

what happened today's reason
fresh, authenticated, complete report; nobody scored above zero no_uid_mapping
winners exist but none maps to a UID (registration problem) no_uid_mapping
feed absent / stale / unauthenticated no_report, stale, unauthenticated

The first is not a fault — the lane worked and there was nothing to pay. The others are. Nothing downstream could tell them apart.

Why it matters

This is what wallscaler's review of #147 asked for. "Pay compute when CyberGym is idle", implemented on today's reasons, would also pay compute when the CyberGym feed is simply down — and a stale feed paying the compute lane is exactly the failure that must keep burning.

What changes

idle_no_winners when the tournament produced no winners at all; no_uid_mapping stays for a winner that exists but cannot be paid. The bridge records lane_idle beside it.

Weights are untouched — the share still forfeits to burn exactly as before. This only gives the event a name that a later policy can key off.

On #147 itself

I am leaving it open rather than merging it. wallscaler's F1 stands: the no_contribution branch it keys off cannot fire from the real bridge (an enabled positive-fraction spec always forfeits or contributes, so a zero-winner tick returns ok with {burn_uid: 0.30}), so the redirect never happens and the validator would gain an accepted shape with no producer. Making it real also means moving a forfeited lane share to another lane, which contradicts the exported unproven_lane_behavior contract and THIN_SUBNET_DESIGN.md — a call for jared and wallscaler together, not something to slip in behind a merge. This PR is the piece that is needed either way.

54 passed in the adapter suite (adds 2: the idle case and the mapping-failure case).

An empty CyberGym vector had one name for two different events. A fresh, authenticated, complete
report in which nobody scored above zero -- the lane worked, there was nothing to pay -- burned as
`no_uid_mapping`, the same reason a registration problem produces, and a sibling of `no_report` /
`stale` / `unauthenticated`. So nothing downstream could tell an idle lane from a broken one.

That distinction is the prerequisite for any N=0 policy (wallscaler's review of #147 asked for
exactly this): "pay compute when CyberGym is idle" implemented on today's reasons would also pay
compute when the CyberGym feed is merely DOWN, which is the case that must keep burning.

`idle_no_winners` is now returned when the tournament produced no winners at all; a winner that
exists but maps to no UID stays `no_uid_mapping`, because that is a fault. The bridge records
`lane_idle` alongside. No weights change: the share still forfeits to burn exactly as before.
@ai-hpc
ai-hpc merged commit debd02b into main Sep 10, 2026
9 checks passed
@ai-hpc
ai-hpc deleted the ai-hpc/name-the-idle-lane branch September 10, 2026 18:26
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