Operator catalog
September 22, 2026 · View on GitHub
One page per glyph the parser actually builds. Semantics below are the
live rule_loss path. The 2-D column points at the scoreboard in
../../dsl.md. Pages are written by hand against that
parser. Nothing here is generated, and nothing here is a second adv
recipe.
| Glyph | Page | Kind | 2-D fixture |
|---|---|---|---|
c++ | exaggerate | loss | right — bipolar slider |
c-- | erase | loss | right — neutralize at g=0 |
a=b | write | loss | right — remap |
a#b | freeze | loss | right — retain |
a%b | orthogonal | loss | right no-op on perpendicular axes |
a~b | replace | macro, expands | recipe, not an independent win |
a^b | pixel | loss | dead — TwoAxisBackend has no render |
;c | reward | parsed | not implemented |
@ | — | stripped | ignored before parse |
Composition
Rules join with |. Each rule's loss is multiplied by alpha (default
1). A bare :0.4 sets alpha. :key=value sets a float option
(guidance on ++, --, and =). The concept text itself cannot
contain :; sanitize_prompt rewrites the characters the parser uses
as syntax before {random_prompt} is substituted.
red--|stripe#stripe:0.5
red++:0.4:guidance=5
a~b is expanded before that split. It is not a fourth loss.
What the 2-D game will not run
loss_game / game call rule_loss for every rule they keep.
^ and ; raise GameError on this fixture instead of pretending to
train. See ../games.md.