The agentic network · a Gord Holdings companyRoadmap
← All packages
The record · v0.1.1 · Apache-2.0

@flashyos/backlog

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.

npm install @flashyos/backlognpm ↗source ↗

Why it exists

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.

What it refuses to do
An agent can file anything and publish nothing — filing is private, and promotion takes a named human. Nothing sets its own expiry either: a blocker is current for fourteen days and an idea for a hundred and eighty, because a backlog that cannot decay is a lie told at increasing volume.

How it works

`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.

Related concepts
IntentMeshagentic autonomous organizationmachine-readable organizational trustAI agent trust register

Use it

What is waiting on one person, across every repository
npx @flashyos/backlog mine person/michael ./fragments

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-backlog

In practice

Publish intentions the way facts are published
An estate emits a backlog fragment per repository and merges them into one list, so what each org intends to do is discoverable and matchable across a portfolio instead of buried in seventeen TODO files.
Let a stale plan admit it is stale
`summary().decay` reports the share of the live list that has stopped claiming to be true; nothing deletes an expired item, but `stale()` finds it, so a month-old fragment cannot over-report how current the plan is.

How it stays honest

The 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.

.github/workflows/backlog.yml ↗the workflow that keeps this current — read it, it hides nothing

Questions

What is backlog/1?
backlog/1 is the future tense of a record: one item per intention, filed by the agent doing the work in the repository that owns it, decaying on a deadline derived from its kind, and merged into one list across an estate.
Can an agent publish a backlog item on its own?
No. file() has no visibility parameter and promote() throws for any id that is not a person’s. An agent may file anything and publish nothing — promotion takes a named human, which is consent expressed as a type signature.
Why does a backlog item expire?
Because an intention nobody restates has stopped being evidence. expires is derived from the kind and refused as input — a blocker lasts fourteen days, an idea a hundred and eighty — so a backlog cannot lie by inertia.
Can one organisation file work onto another?
No. 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, never as a row that appears because a stranger wrote a file.

The licence

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.

Keep reading

The network directory
Also in the record
@flashyos/canon@flashyos/directory@flashyos/shiplog@flashyos/checkpoint@flashyos/assetmesh@flashyos/delivery@flashyos/playbook@flashyos/mesh@flashyos/holding@flashyos/mail@flashyos/frontdoor