Coordination for the WHO Assured AI programme: the requirements, the processes that build the programme's GitHub set-up, and the combined work plan. Staged here, in litlfred/aai-programme, until the owner syncs it to the WHO organisation. Programme status is held on GitHub issues; see the programme set-up request, litlfred/folio-assistant#2605.
The site is at https://litlfred.github.io/aai-programme/, and a branch's preview at STAGING/<branch>/ under it. Both are built and published by an agent, never by a workflow (owner, 2026-10-10): bun run site:build -- --publish for the root, bun run site:build -- --staging <branch> --publish for a preview. Mount the layers first with bun run cat mount:remote and the work plan with bun run cat state:mount.
Until Platform has a repository of its own, its scope is recorded here.
Agreed by the PM & Architecture Integration on folio-assistant#2605:
- Platform is a cross-cutting technical delivery function that supports WS1 to WS5. It is not a sixth research workstream.
- It follows the same issue, field, label and linking rules as the workstream repositories
aai-ws1toaai-ws4. Its deliverables are features under programme epics inaai-programme. - It has a named lead with Maintain access on this repository. The lead is not yet confirmed.
- Technical integration readiness is judged by the Technical Integration Lead, not by Platform.
- Lead. To be confirmed with Ritika and the relevant technical colleagues.
- Scope. Which activities belong to Platform and which to WS1 or the other technical workstreams. Candidates from project 110, to be reviewed with Ritika before anything moves: rendering knowledge-graph content to Pages, pipeline Docker images, deploying folio-assistant to OHS, safe self-hosting, and the country data-sovereign pipeline (cross-workstream).
- Board. If project 110 becomes the Platform board, Ritika and the Platform lead agree who owns it.
The Platform board of record is the issues on the programme and Platform projects. Beans are the agents' working notes on how to do that work. They never replace an issue.
Proposed rule for when a bean becomes an issue (open for discussion):
- Open an issue when the work needs a person to see or act on it: it delivers part of a programme epic, changes a date, creates or clears a dependency on another workstream, or needs a human review or decision. Link the bean to it with
issue:. - Keep it a bean when it is a step inside work that already has an issue, or agent housekeeping that nobody outside the repository needs to track.
- Going back. An issue that turns out to be agent housekeeping is closed as not planned, with a link to the bean that carries on the work.
The board below counts open beans without an issue, so the gaps stay visible.
It is a cat-harness instance named aai-programme, declared in aai-programme.json. It holds:
processes/: the programme's processes as BPMN, starting with the build sequence. Seeprocesses/README.md.library/: the programme requirements, ingested fromuploads/: v0.3.6, the original request on litlfred/smart-ra#76; v0.4.1 as written by the PM & Architecture Integration; the v0.4.2 draft; and v0.5, the owner's proposal of 2026-10-20 (everything public, no private layer). v0.5 is not the baseline: the PM & Architecture Integration declined it on folio-assistant#2605. The next baseline is built from the PM's v0.4.2 review copy and is used only once the PM approves it. Each section is a JSON-LD node that beans, processes and issues can cite.beans/: the work plan, kept on the branchcat/aai-platform/beans.
index.config.json lists the other knowledge graphs whose work plans the board reviews, each pinned to a commit the owner approved and limited to its beans directory. Until that list has been tested, beans-sources.json and scripts/pull-beans.ts still build the board.
What runs on its own (AUTO-07). No tokens (owner, 2026-10-20): the programme fields are labels on the issues (fields.ts), the automations write those labels with the workflow's own token, and project 110, the programme project by the owner's decision of the same day, shows them (set-up). The scripts are in scripts/programme/; their decisions are in rules.ts, tested in rules.test.ts; the workflow is programme-automations.yml. Every script reruns safely and has --dry-run (AUTO-08). None sets Integration readiness, Review status, Risk category, Impact, a decision or a risk acceptance (AUTO-05).
| Automation | Trigger | What it does | Scope | Owner |
|---|---|---|---|---|
| AUTO-01 add to the board | by hand in project 110 | Programme-level items by type, and workstream items labelled thin-slice, sprint-demo, blocked or at-risk. 110's auto-add cannot read a repository outside WHO's organisation |
project 110 | PM & Architecture Integration |
| AUTO-03 Programme status | an issue opened, closed or reopened | status:Not started on a new programme item with no status; Done when closed as completed; Cancelled when closed as not planned; In progress when reopened |
items on the board | PM & Architecture Integration |
| AUTO-04 Delivery health | daily | Raises an open epic's health: label to the worst blocked or at-risk label on its open sub-issues; never lowers it |
open epics | the epic's owner lowers it |
| AUTO-10 validation check | daily | An item labelled readiness:Validated with no Validation confirmed: comment from someone with write access to the repository (or, once named, the Technical Integration Lead) gets validation-exception and one comment; the label goes when the comment appears or the value changes |
items on the board | Technical Integration Lead |
Whose confirmation counts for AUTO-10 (owner, 2026-10-20): the repository's own permissions, so its owner, members and collaborators, while no Technical Integration Lead is named. Setting technicalIntegrationLead in scripts/programme/config.json narrows it to that login. Until then anyone with write access can confirm, so a partner with Write on their own workstream repository could confirm their own work there; the QA report (scripts/programme/qa-validation.ts, rebuilt on every publish) shows who set and who confirmed each, and flags self-confirmation. AUTO-11 (backfill) is not needed: nothing can add to 110 without a token, so items are added there by hand.
How a bean becomes a programme issue, and how the two are kept from drifting, is in the knowledge graph as two processes: triage a bean (bpmn) and act on bean drift (bpmn). Run the check on demand by commenting /check-drift on any issue; the report is pulled/drift.md and the board's Bean drift page.
The labels from section 7.3 of the programme requirements. Keep them unchanged.
| Label | Meaning |
|---|---|
rq:R1 to rq:R7 |
Every research question the item contributes to |
route:control, route:0, route:a, route:b |
Which comparison routes the item covers |
thin-slice |
Part of the end-to-end demo slice |
sprint-demo |
To be shown at the next fortnightly sprint review |
blocked, at-risk |
Raised by the team on its own items. Add a "Next action" line to the issue body: what will happen, who will do it, and by when |
needs-review |
Ready for WHO review |
validation-exception |
Set by automation only |
The gates: labels, one per Gates output, are added once the PM supplies the Gates output list.
Beans are the agents' work plan: one Markdown file per work item, read by the beans CLI.
- This repository's beans live on the branch
cat/aai-platform/beans.bun run cat state:mountputs it atbeans/. - The combined board,
pulled/README.md, lists the beans of every repository inbeans-sources.json. To add or remove a repository, edit that file. Repositories on itsdenylist are refused. - A bean that tracks programme work carries
issue:with the URL of its GitHub issue. The issue is the source of truth; the board counts open beans without one.
bun run scripts/pull-beans.ts # rebuild pulled/
bun run scripts/pull-beans.ts --dry-run # print the summary only
bun run scripts/pull-beans.ts --check # fail if pulled/ is out of dateThe Pull beans workflow rebuilds the board every day and on demand.