// ── Who may see a roster ────────────────────────────────────────────────── // // The audience model, in its own file because it is its own thing: **core has no // audience model at all**, does not know what your rungs are called, and cannot // invent one — which is the entire reason `projectRoster` exists. A module that // has no such model omits that method and core serves rosters whole; a module // that has one answers with it. // // A constant here, and an async function returning it, because in a real module // this reads an operator setting — whether rosters are public is a deployment's // decision, not a module author's. Keeping the read behind a function is also // what makes the rule testable: the provider's fail-closed path is only reachable // if the audience lookup can fail, and a bare constant can never fail. /** `'public'` · `'members'` (accounts behind a character in the clan) · `'staff'`. */ const ROSTER_AUDIENCE = 'public' async function getRosterAudience() { return ROSTER_AUDIENCE } module.exports = { getRosterAudience, ROSTER_AUDIENCE }