Whether this is a band ID — a BARE POSITIVE INTEGER, spelled without a sign, a leading zero or
anything else ("1", "12"; never "0", "01", "1.5", "sort").
ONE predicate, read by both ends of the same fact: the band ADDRESS resolves nothing else
(#159 — "the id is a bare number"), so anything the STORE holds outside this shape would be a
band nobody can address. withBandIds therefore treats an id failing this test exactly as it
treats a missing one, and mints. That keeps two promises at once: every band is reachable at
/eq/bands/{bandId}, and a show written by an older build still opens — it is renamed, not
refused.
It is also what frees the rest of the /eq/bands/ namespace: a word like sort cannot be
mistaken for a band, so an OPERATION may live beside the members without shadowing one (#173).
Whether this is a band ID — a BARE POSITIVE INTEGER, spelled without a sign, a leading zero or anything else (
"1","12"; never"0","01","1.5","sort").ONE predicate, read by both ends of the same fact: the band ADDRESS resolves nothing else (#159 — "the id is a bare number"), so anything the STORE holds outside this shape would be a band nobody can address.
withBandIdstherefore treats an id failing this test exactly as it treats a missing one, and mints. That keeps two promises at once: every band is reachable at/eq/bands/{bandId}, and a show written by an older build still opens — it is renamed, not refused.It is also what frees the rest of the
/eq/bands/namespace: a word likesortcannot be mistaken for a band, so an OPERATION may live beside the members without shadowing one (#173).