All use cases

code.tisch

Forty stickers, one ruleset

Two hundred tables, one behaviour. Each sticker carries only the number. The same menu for all of them, but the table number lands in the ordering URL. A dish changes once, not two hundred times.

Where it hangs
Tables, hotel rooms, desks, batches, inventory numbers.
Why the paper stays
Maintaining forty separate static codes, every time a dish changes.
If the value is missing
The rule goes inert and the scan falls through — the same as with a missing file. No 404, no 500. That is why a second mandatory rule without a placeholder sits underneath it.

Live resolution

code.tisch = 12
code.id = 7fK2r9xgeo.country = CHlang.primary = de
  1. alwaysMenu with the table in the target
  2. alwaysOtherwise the website
https://adler.ch/tisch/12

Value on the child code

A long table with labels stuck along its edge at even spacing
The same code on every shot.Tables, hotel rooms, desks, batches, inventory numbers.

The ruleset

Two always in a row are deliberate here.

Not a description of what the engine could do — this is the text a code carries. The first matching rule wins, and the last one always matches.

ruleset · version 1

{
  "rules": [
    {
      "when": "always",
      "then": { "type": "redirect", "url": "https://adler.ch/tisch/{code.tisch}" }
    },
    {
      "when": "always",
      "then": { "type": "redirect", "url": "https://adler.ch" }
    }
  ]
}

Exactly two levels: a child code evaluates its parent's rule list and carries only its own values. It has no ruleset of its own — the project shares data, not rules.

Also

Same grip, different value.

{code.batch}
The batch in the support link. One label per lot, one ruleset for all.
{code.room}
The room number in the service URL. The sticker on the nightstand stays.
{code.asset}
The inventory number into the ticket system. Whoever reports it types nothing.

All use cases

Reprinting is the expensive part. Stop doing it.