// The states this module keeps on the bus and whether other modules may read them (novox/hq ADR 0495 clause 2; issue // 1790): the module says it itself, from its code, as it starts (index.ts calls keeps with this list), and a reader is // granted what it said (clause 3). A state is readable when another module's manifest reads it; none reads gitea's. // test/kept.test.ts holds the list to the manifest's `state`. export const KEPT: readonly { readonly name: string; readonly readable?: boolean }[] = [ { name: "announced" }, { name: "bound" }, ]; /** The announcement of these states, in the layout mesh-sdk's go/announce reads (novox/hq ADR 0495 clause 2): version 1, * the module, the machine when known, and the states sorted by name, `readable` only where true. It is said as the event * `states`, which is the subject mesh.mod.gitea.event.states. gitea says it with the SDK's `emit` because the * toolchain's SDK, which judges R4e's group, predates the SDK's `keeps` (0.1.15); switch to `keeps` once the toolchain's * SDK is 0.1.15 or later (issue 1852). */ export function statesAnnouncement(module: string, node: string | undefined) { const states = [...KEPT] .sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0)) .map((k) => (k.readable ? { name: k.name, readable: true } : { name: k.name })); return { v: 1, module, ...(node ? { node } : {}), states }; }