A way organisations work together, as a document rather than code
playbook/1 — a way two or more organisations work together, as a published document rather than code. Named roles, ordered steps, and an evidence kind per step. Authored by an org, served at its own domain, adopted by reference.
The ways two organisations could collaborate used to be compiled into our API — seven of them, as an array in a TypeScript file. Adding an eighth meant a code review and a deploy, and no organisation could describe how it works with partners. Social posts, press releases, research, sales, shared leads, events, integrations: “everything” is not a list anybody finishes writing, so the list stopped being code.
`playbook/1` is a published document: named roles, ordered steps, and a kind of evidence per step. An organisation authors it, serves it beside its other machine surfaces, and anyone adopts it by reference — the id carries the authoring org, which is what makes it attributable once it has been copied into somebody else’s proposal.
Roles, not sides. The shape it replaces carried a comment conceding that “a” and “b” are meaningless past two organisations. `bindRoles` makes the old two-sided case fall out of the general model, and a step owed by `each` produces one task per participant — which is how a three-party collaboration works as naturally as a two-party one.
Four evidence kinds, and only one is a link. Requiring a public URL is right for an article and wrong for a closed deal, where it asks two companies to publish a customer in order to prove they served one. A countersigned step publishes nothing about the work, only the agreement that it happened.
`instantiate` returns steps rather than writing rows: it touches no database, so a proposal can be previewed before anybody consents to it.
The seven playbooks FlashyOS publishes are generated from the in-code templates they replace, and a differential test runs both engines over the same organisations and asserts the tasks come out identical — titles, briefs, owners and order. A snapshot test would pass the day somebody regenerates a wrong playbook; this one caught a real defect the hour it was written, where a placeholder rotated the wrong way and asked an organisation to publish about itself.
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.