Big Boards
Kanban boards over your notes. A board is a tag query plus an ordered list of phase columns, editable from the admin, and your agents move the cards by writing the phase back to the note as they work.
A Big Board is a kanban view over your notes. It is not a second place to file work: a board is a saved tag query plus an ordered list of Phase columns, so a note appears on a board because of the tags it already carries, and moves between columns because its phase changed.
That is the whole point. The board cannot drift from reality, because there is no separate board state to drift.
The four boards
| Board | Membership tags | Phases |
|---|---|---|
| Tasks | task + blackops | Todo, In Progress, Blocked, Done |
| Bugs | bug + blackops | Needs Triage, Open, In PR, Fixed, Closed |
| Features | feature + blackops | Idea, Triaged, Planned, In Progress, Blocked, Shipped, Won't Build |
| Content Seeds | content-seed + blackops | Seed, Drafting, Drafted, Launched, Published |
Membership matches on all tags, not any. A note tagged feature alone is not on the Features board; it needs feature and blackops together. A note can legitimately sit on more than one board.
The phase vocabularies are not invented for the boards. They are the values the existing agent skills already write into their bold **Status:** fields, which is why the boards rendered against existing notes with no backfill.
Managing boards
Boards are managed from Big Boards in the admin. New board opens the editor; each board card carries Edit and Delete.
The editor takes:
- Name, and a slug that follows it until you type your own. The slug is the board's URL at
/admin/boards/<slug>. - Description — what the board is for, shown on the card.
- Membership tags — comma separated. A note needs all of them to appear. One tag matches far more than you expect, which is why the built-in boards pair a subject tag with
blackops. - Phase columns — comma separated, left to right. These have to match what your agents write into a note's phase, or the cards pile up in Unsorted.
- Position — where the board sits in the list.
- Enabled — turn a board off without deleting it.
Tags and phases preview as chips as you type, with phases numbered so the column order is visible before you save.
Deleting a board removes the view, never the work. The notes it showed keep their tags and their phases, and they reappear the moment an equivalent board exists.
Global boards
A board with no workspace is global: it appears for every workspace on the platform. The four built-in boards are global, and they are marked as such on their cards.
Only a platform admin can edit or delete a global board. A site admin sees them, and creates boards scoped to their own site.
Boards are rows, not code
Board definitions live in the note_boards table. Adding a board, renaming a column, or reordering phases is a data change. It does not need a deploy.
Each row carries:
slug,name,descriptiontags— the membership queryphases— the ordered columns, left to rightposition— the order boards themselves render inis_enabled— hide a board without deleting itworkspace_id—NULLmeans the board is global; set it to scope a board to one site
The four boards above are seeded as global, which is how they have always behaved: the admin board list renders them in "All Sites" mode without scoping to a workspace.
If the table cannot be read, the boards fall back to a built-in seed list rather than rendering an empty page. An admin looking at a board screen with nothing on it would reasonably conclude their queues were gone.
The Unsorted column
A note whose phase matches no column on its board, including a note whose phase was never set, renders in an Unsorted column rather than being filtered out.
Unsorted comes first, not last. Those notes need a phase picking, and a column parked past six others on a horizontal scroll is one nobody reads. It disappears entirely when empty, so a fully classified board does not carry a permanent empty slot advertising the fact.
This is deliberate: the failure a board must never introduce is a note silently vanishing from its queue.
Phase matching is tolerant, not fuzzy
Phase comparison ignores case and surrounding whitespace, so a note whose field reads **Status:** in progress still lands in the In Progress column.
It goes no further than that. In Progres is a typo you should see flagged, not one the system quietly absorbs.
A wrong phase warns, it never rejects
Writing a phase that is not a column on any board the note belongs to still succeeds. The response carries a PHASE_NOT_IN_BOARD warning naming the phase, the expected vocabulary, and the fact that the note was saved and will render under Unsorted.
Rejecting the write would mean losing the note's update over a spelling difference. Warning keeps the work and surfaces the problem.
No warning fires when the phase fits, when no phase was written, or when the note is on no board at all. A plain note carrying a phase is not a mistake.
Agents move the cards
The phase lives on the note, so the agent doing the work is the agent that updates the board. The bug fixer writes In PR when it opens a pull request. The feature builder advances a note through its own vocabulary as it goes.
Nobody grooms the board afterwards. Opening it shows the state the last run wrote.
Related
- Note Taxonomy — the tag vocabulary that decides board membership
- Sorties — how agent runs get fired in the first place