Skip to content

Bug Dodger

Version 1 · Disclaimer

Almost nothing in wild fermentation is unconditionally good or bad. Brettanomyces is the point of a lambic and a defect in a clean ale. Pediococcus with Brett present is the deepest acid engine there is; without Brett it is a fault machine. Acetic acid is flavour-critical at 0.6–1.2 g/L and a dumped carboy above it. Oxygen at pitching is yeast health; the same molecule through a slack bung three months later is mould and vinegar.

It is all about fun and games... So let's see what we've learnt.
Watch out for the context, an undesirable entity may not be so in a different context.
Take lil Mr. Brewer to the end of the rainbow, where gold homebrew lambics are found.

The drill

How to play

  • Space, the up arrow, or a tap rejects the approaching entity. Doing nothing accepts it: the brewer eats what you do not jump over.
  • A jump only acts on an entity within the brewer's reach, marked in accent colour in the lane and with a ▶ in the list. Jumping early is just a jump, and the entity is then accepted when it arrives. The reach is about two seconds of lead time at the default speed: enough that this stays a question about knowledge rather than reflexes.
  • P or Esc pauses, and a pause stays until you clear it. Nothing is greyed out while paused, so you can study the lane, and links in the list below are live.
  • Speed and Spacing are yours to set. Spacing is a percentage of the crossing time rather than a fixed delay, so the visual gap between entities holds when you change speed.
  • Pause on error is on by default: a wrong call stops the run and shows you why, and waits for Space or Esc. Untick it to be told without being stopped.

Three operation modes:

Mode What it does
Single context One context on a loop. Use it to drill a context you are weak in.
Random The context changes between rounds, announced in the banner. Harder, and closer to the real problem, because you cannot pre-load one answer set.
Study No timer. Space rejects, Enter accepts, every card is shown, and either key moves on. This is also what reduced-motion visitors get.

Scoring is deliberately asymmetric. A correct call is +1. Rejecting something good costs −1. Accepting something bad costs −2, because letting an infection into a carboy is worse than turning away a bug you could have used. Conditional entities score nothing either way: the point of those is the reason, not the reflex.

The contexts

Context What you are judging for
Lambic Spontaneous, long mixed fermentation, aged hops, oak. The widest tolerance of anything here, and the only context where the enteric phase and a ropy phase are part of the plan.
Mixed fermentation A clean primary, then deliberate bugs on a schedule. Narrower: the programme has compressed or deleted phases and has to replace their contributions on purpose.
Clean ale One pitched Saccharomyces. Almost everything else is a defect, which makes the few things that are not the interesting part.
Bottle conditioning What survives the package and what over-attenuates in it. Gravity stability, residual dextrins, headspace oxygen, and whether anything is left alive to carbonate.
Maillard prep The ingredient kitchen rather than the carboy: cook products, kernels, nitrogen sources and thermal-process contaminants.

Where the verdicts come from

Every verdict carries a one-line reason, a confidence tag and a citation to a page on this wiki. Nothing in the entity set is an unsourced assertion, and the validator refuses to publish an entity whose verdict has no why line, no confidence tag or a link that does not resolve. The bulk of the fermentation entities come from Microbial Succession, Organisms & Chemistry and Blending, Donors & Packaging; the Maillard set comes from Maillard-Cooked Fruit Preparations and the two kernel benches, cyanide dose and marzipan against cyanide cost.

This simplifies, on purpose

A drill has to give one answer per entity per context. Real practice judges a dose at a moment: ethyl acetate is fruit at one concentration and nail varnish at another, and diacetyl is a threshold rather than an identity. Entities that turn on dose are marked as such and show the figure, but the game still scores them as a single call. Where a verdict here and a linked page disagree, the page is right and this is stale.

Adding to it

The entity set is data, not code: one YAML file per entity in docs/assets/data/bug-dodger/entities/, compiled to entities.json by tools/wb.py entities and validated by tools/wb.py validate along with everything else. An entity carries verdicts only for the contexts where it is relevant, so adding a Maillard compound does not oblige anyone to invent a lambic opinion about it. The schema, vocabularies and required fields live in game_entities in wiki.config.yaml.