RX0013

Domain: Engine

Error message

errors.feml declares more refusals than one contract set can hold (limit %s, reached at refusal %s)

In the message, %s marks a value that the engine fills in when it raises the error.

The story

The engine refused to start because the catalogue of refusals has outgrown its container. Quick background. Every refusal the engine can raise is a row in errors.feml, and the whole catalogue lives in one tungsten contract set, one contract per refusal, each keyed by its id. A contract set has a fixed capacity, and that capacity is the catalogue's ceiling. Now, what happens at the limit? The engine could drop the last few rows, but think about what that means. A refusal that is declared would suddenly look undeclared, and the design promises that raising an uncatalogued refusal must be impossible to construct. A truncated catalogue would downgrade that promise from impossible to merely unlikely. So the engine stops instead, and tells you where it ran out: the limit, and the refusal that did not fit. Picture a library shelf that is full: you do not shave pages off the new book, you add another shelf. The same two cures apply here. Raise W_MAX_CONTRACTS in tungsten, or split the catalogue across more than one contract set. Either way, every refusal keeps its explanation.

Text from the Rush engine's error catalogue.