Backlog Readiness Source
Which signal marks a Work Item intentionally ready for pickup, and what
pull-work is allowed to do when that signal yields nothing.
Decision
- The org project board is the readiness source. The configured
BoardProvider — org GitHub Project
kontourai/1(“Flow Agents Builder Platform”) — carries readiness as board Status.ready_statuses=["ready"]is the pickup filter; the board’sPriorityfield ranks the cross-repo ready queue. - Triage is the automated intake status. Every new
kontourai/*issue is added to the board with Status=Triage by the shared reusable workflow (kontourai/.githubadd-issue-to-project.yml, called per-repo from.github/workflows/add-to-project.yml); closing an issue moves it to Done. Nothing reaches Ready automatically. - The Triage → Ready move is the intentionality act. Moving an item to Ready (and setting Priority) is the triage responsibility that makes work eligible for agent pickup. This is a deliberate human/triage-pass decision, not automation.
- A configured readiness source that yields nothing is a surfaced warning,
never a silent fallback. The board reader emits
zero_ready_itemswhen the configured board produces an empty ready queue (landed with PR #449), and the issue-listing path emitsboard_provider_bypassedwhenever a BoardProvider is configured but issue-level listing is used instead.pull-workmust carry these warnings into its artifact and route to triage/intake rather than silently substituting unranked issue listing. - The settings contract declares the real board taxonomy: the schema’s
exclude_statusesvocabulary includestriage, and this repo’s settings excludetriageexplicitly.verificationremains in the schema vocabulary for provider-neutral shapes even though this board has no such column.
Evidence basis (re-verified live, 2026-07-16)
Issue #441 was shaped on 2026-07-06 evidence that the board was dead (15 items, all Done, no automation). That premise is now false:
- The kontourai org has exactly one ProjectV2:
kontourai/1, open, 468 items (306 Triage / 14 Ready / 148 Done) spanning 13 repos; 169 of 171 open flow-agents issues are on it. - The auto-add workflow targets exactly this project
(
PVT_kwDOEJYCKs4BYzgP), Status field options: Triage, Ready, In Progress, Blocked, Review, Done. - A live board-driven
pull-workread returns a 14-item priority-ranked cross-repo ready queue with zero warnings and zero intake gaps. - The agent-path
ghtoken carries theprojectscope, so the read:project friction recorded in #441 no longer holds.
Rejected alternative
Label-based readiness (per-repo ready/blocked/in-progress labels).
Recommended by #441 when the board was dead, because it needed no board
maintenance and no extra token scope. Both advantages evaporated once the
auto-add automation went live org-wide and the agent token gained project
scope — and labels cannot express cross-repo priority ranking without
inventing a parallel convention per repo. Revisit trigger: if the auto-add
workflow or project token scope regresses for agent environments, reopen
this subject rather than quietly re-deriving readiness from labels.
Follow-ups (owned elsewhere, not absorbed here)
- One-time triage sweep of the ~306 Triage items (and any open issues missing from the board) to assign Ready/Priority intentionally — owned by the triage pass in #443 item 2. Not executed with this decision: the Ready set was already non-empty (14 items), and bulk-moving 300+ items without the accepted mechanism would manufacture fake intentionality.
- Board maintenance as flow responsibility (intake adds, claim → In Progress, completion Done assertion): #443.
- Doctor board-health checks (configured-but-unfed board, dead readiness
source, missing token scope): #443 item 5 / #321. Until that surface
exists, the warnings live in
pull-workprovider output and thepull-workskill contract only. - Workspace-scoped pull-work across multiple repos: #444.