What an organisation intends, published the way facts are
backlog/1 — the future tense of a record. One item per intention, filed where the work happens, emitted as a fragment per repository and merged into one list across an estate or a portfolio. Filed is private, publication takes a named human, and every item decays.
The record has a present tense and had no future one, so the intentions an organisation could actually collaborate on lived in seventeen to-do files and several heads. This is one item per intention, filed by the agent doing the work in the repository where the work happens, and merged into one list across an estate or a portfolio.
`backlog/1` is the future tense of a record: one item per intention, filed where the work happens and emitted as a fragment by the repository that owns it. Three rules carry the design, each expressed as a type signature rather than a policy.
Filed is not published: `file()` has no visibility parameter, and `promote()` throws for any id that is not a `person/`. An agent may file anything and publish nothing. Every item decays: `expires` is derived from the kind and refused as input — a blocker is current for fourteen days, an idea for a hundred and eighty — and a backlog that cannot decay is a lie told at increasing volume.
Nobody files work onto somebody else: a fragment may only carry items whose ids name its own repository. Cross-organisation intent goes through the mesh, where the other side approves it.
Installing it puts this command on your path — read from the package’s own manifest, so this list cannot drift from what you actually get.
flashy-backlogThe fragment is a generated artifact like a lockfile: the Backlog workflow emits it from .backlog/items.json daily and never hand-edits it, and the daily run matters because items decay — a fragment a month old under-reports how much of the plan has quietly stopped claiming to be current. The served copy is the public projection, written by the emitter rather than copied by a step, and nothing reaches it until a named human promotes it. Verify it yourself by re-emitting from the same items file.
Apache-2.0, read from the package’s own manifest. Embed it in anything, including closed software — that is what makes a spec adoptable and a verifier worth running. FlashyOS’s server side is AGPL-3.0-only instead, and a test in the monorepo asserts the direction between them: AGPL code may consume this, this may never consume AGPL code.