Protocol 1.16 — performance-aware, sovereignty-first.
Each repo declares its supported capabilities in
bdd/RADICLE_PRIORITIES.json. Clients negotiate against
that file instead of guessing. New capabilities arrive as
planned, graduate to optional, and remain
explicit and grep‑able forever.
Capability tiers
Every capability key carries a tier value — not a boolean. “Supported” is not the same as “required”, and capabilities the repo plans but has not implemented stay visible so callers can route around them.
| Tier | Meaning |
|---|---|
| required | Backlog cannot be rendered correctly without it. (featureCatalog, boardState.) |
| optional | Implemented and stable. Clients may use it; absence is not an error. |
| planned | Declared as a roadmap commitment. Implementation is in progress or scheduled. |
What protocol 1.16 added
Protocol 1.16 formalises the performance work that turned the board
from “rebuilds the whole world on every request” into a
compact-first, side-view-cached read model. None of these changes
affect canonical authority — .feature files remain
the backlog source of truth.
| Capability | Tier | What it gates |
|---|---|---|
| boardPerformanceHotPaths | optional | Compact backlog + sidecar separation on first paint. |
| compactCardPayload | optional | /api/backlog returns compact cards by default. |
| cardDetailHydration | optional | /api/card/detail?key=… hydrates the full card on demand. |
| backlogResponseSidecars | optional | Ghost cards, epic rollups, suite evidence load as opt-in sidecars. |
| sharedReadModelCache | optional | One parse, many endpoints, with explicit invalidation triggers. |
| persistentBacklogResponseCache | optional | Warm restarts serve compact backlog without rebuilding cards. |
| performanceSmokeReporting | optional | scripts/performance_smoke.py records latency, bytes, cache state per endpoint. |
| payloadBudgetEnforcement | optional | Smoke run fails when compact backlog, card detail, epics, hygiene, or Gantt exceeds documented byte budgets. |
| httpResponseCompression | optional | Gzip / brotli negotiation on large JSON when the client sends Accept-Encoding. |
| compactReadModelAssembly | optional | Build compact cards directly from the read model; no full-card materialisation on the hot path. |
| incrementalCardPatchApi | optional | Mutations return targeted card patches and a board-state revision token. |
| sideViewCompactSchemas | optional | Compact mode + detail hydration for /api/epics, /api/blockers, /api/hygiene. |
| multiRepoProgressiveLoading | optional | Phased startup: repo shells → active repo cards → background secondary repos. |
| browserRenderingVirtualization | optional | Large columns and collapsed groups stop creating DOM nodes for hidden cards. |
| parallelTestRunner | optional | scripts/run_tests_parallel.py with serial-allowlist + per-domain step bundles. |
| bddWorkerStepBundles | optional | BDD workers import only the step bundles their feature domain needs. |
Earlier milestones
1.10 — Suite evidence
Optional Circle Source evidence read models in bdd/SUITE_EVIDENCE.json and the matching suiteEvidence capability family.
1.11 — Lifecycle projection
Current passing/failing test evidence projects card lifecycle; sync worker-only status separates from rich remote-issue status.
1.12 — UX proposal review
Five-planes review evidence on uxReview, with templates exposed via /api/ux/review-template.
1.14 — Shared contract rollups
sharedContractRollups and userDesignProposalReview turn multi-repo contracts into a read-only integration signal.
1.15 — Card provenance
Editable BDD provenance under bdd/CARD_PROVENANCE.json, served via /api/provenance and mirrored into Radicle issues.
1.16 — Performance contract
The compact/cache/budget capabilities listed above, plus the parallelTestRunner + bddWorkerStepBundles developer-experience pair.
bdd/RADICLE_PRIORITIES.json before falling back to feature
detection. If X is planned, treat it as absent
today and as a written commitment for tomorrow.