Skip to main content

Module fixer

Module fixer 

Source
Expand description

The [roles] fixer fallback chain, shared by every node that asks a fixer.

Four nodes turn a fixer into a seat: the review loop’s fix rounds (and the operator-selected fix), the gate-fix round, land’s fix rounds and the rebase conflict round. Each of them runs a plain forward for over attempts and moves to the next entry only when the call advances (crate::agent::output_advances, the same decision point the other chained roles use); this module holds what they would otherwise each write and drift on: the order, the seat of each entry, and what a handover looks like in the record.

Sticky within a run, never persisted. Once a fallback agent answered a fixer node, later calls in the same run start from it, so its session carries across rounds instead of the first agent being re-asked (and its quota re-billed) every round. The memory is the run’s own RunState::handovers: the last handover on a FIX_NODES node whose to is on the chain. The report and the behaviour therefore read one record, and nothing is written to the config. A call runs from the start to the end of the chain, forward only: entries before the start are not asked again, so the chain’s last failure ends the call as it always did.

A fallback agent always gets a fresh SeatState (seat_for), never the previous agent’s seat renamed: its session id is minted from the agent too, because the previous agent’s uuid is already taken by the CLI.

Constants§

FIX_NODES
The nodes whose handovers attempts reads as “who fixes now”. Every consumer records its handovers under exactly one of these, so the two sides cannot disagree: a name here that nobody records would send every round back to the first agent and bill its quota again.

Functions§

attempts
The agents to ask, in order, each with the seat key it sits in.
failure_of
How a call that did not satisfy the chain failed, and a short reason, for the handover record (land / rebase call the CLI directly).
seat_for
Fetch or create the seat key for agent. The same agent continues its conversation; another agent takes a fresh seat whose session id is minted from the agent as well, so agent::has_session is false and the full context is sent again.