BEST — Roadmap and Status
Last updated: 2026-08-24 (standards submissions sent; IETF BoF landscape reviewed).
Where the protocol stands
v0.9.2 (current stable) adds the one thing the async story was missing and continues the shrinking-core trajectory. Added: first-class correlation — a correlationid CloudEvents extension attribute, optional on commands (defaults to the command id), mandatory on events produced by a command, propagated across process chains. Removed: the webhook push channel (POST /subscriptions, push.webhook, the unspecified HMAC secret, the SSRF requirements), the never-specified grpc transport declaration, and the residue of previously removed capabilities (the memory/registry/lifecycle tombstone pages and memory.json). Push delivery is SSE + MCP notifications; polling remains the universal fallback. See MIGRATION.md and the design decisions. Both production deployments are fully on 0.9.x; the dotquant root manifest validates CONFORMANT with best-validate.
v0.9.1 is a security-surface release with no wire-format change. It fills the largest remaining gap — the spec described how to authenticate a caller but almost nothing about authorising an individual command, leaving the Read/Write scope table as the whole model. 0.9.1 adds deny-by-default per-command policy, actor binding (payload fields naming a principal carry no authority), and controls for destructive commands. It also relaxes the 0.9.0 rule that schema selection be keyed by type: the security control was always don't dereference the caller's URI, never which server-owned identifier keys the lookup, and the stricter wording had pushed implementations into lossy PascalCase↔kebab-case derivations that silently split authorisation from validation. See MIGRATION.md.
v0.9.0 was a deliberate identity-and-conformance release, executed as one breaking migration:
- Renamed BSP → BEST (BEhavioral STate; the full name Behavioral State Protocol is unchanged). Rationale: "BSP" collides heavily inside computing (Binary Space Partitioning, Board Support Package, Bulk Synchronous Parallel); "BEST" is memorable, positions naturally against REST, and
/.well-known/bestplus the npm names were free. - Became a conformant CloudEvents 1.0 profile. Every valid BEST message is a valid CloudEvents 1.0 message. The former deviations were resolved:
dataschemais the absolute catalogue URI on the wire,sourceis a URI-reference, unknown envelope attributes are ignored rather than rejected. PascalCasetypeand JSON-only content remain as profile restrictions. See design decisions. - Consolidated the spec into the single-file SPEC.md (added in 0.8.1), with MIGRATION.md covering the 0.8.x → 0.9.0 changes.
- Reference MCP server republished as
@behavioralstate/best-mcp2.0.0 (legacyBSP_*env vars accepted as deprecated fallback).
Two production deployments exist (dotquant.io, remundo.com) — one implementer, two codebases.
Standards track
The goal is legitimacy through the lightweight, achievable venues first; full standards-track (IETF WG / W3C Recommendation) is deliberately deferred until at least one implementation exists that the spec author did not write.
| Step | Artifact | Status |
|---|---|---|
1. IANA registration of /.well-known/best (provisional, RFC 8615) |
standards/iana-well-known-best.md | Submitted 2026-08-24 — awaiting ticket + expert review |
| 2. Internet-Draft → Informational RFC via the Independent Submission Stream | draft-dinuzzo-best-protocol-00 | Posted 2026-08-24; ISE deferred pending dawn/agentproto chartering — engage those lists (see TODO) |
3. Upgrade IANA entry to permanent citing the RFC |
— | After step 2 |
| 4. Optional: W3C Community Group for visibility / implementer recruitment | — | Undecided |
| 5. Longer term: CNCF sandbox (natural home given the CloudEvents lineage) or IETF WG | — | Requires adoption + independent implementations |
TODO
Everything still open, in rough priority order:
Protocol design
- Retention semantics — no manifest declaration of retention windows: event pollers can't distinguish "not processed yet" from "already expired", and the idempotency guarantee (SPEC.md: duplicate
idrejected "within a retention window") references a window no manifest declares. Aretentiondeclaration on the events capability closes both; needs design discussion. Note: command idempotency/replay protection itself is already specified (envelopeidis the idempotency key; duplicates rejected,409on same-id-different-payload) — BEST already satisfies agentproto's sessionless duplicate/replay requirement (draft-feng-agentproto-session-requirements), a point worth making on that list. - Implement 0.9.2
correlationidin the deployments (dotquant, remundo) and surface it inbest-validate. Done inbest-mcp(2026-08-24): optionalcorrelation_idon the send tools, echoedcorrelationIdsurfaced with event-tool guidance; verified byte-identical behaviour against pre-0.9.2 servers
Evolution candidates from the IETF BoF landscape (reviewed 2026-08-24 against the dawn/agentproto drafts; all additive 0.9.x patches):
- Manifest extension point — capability entries and the manifest root are
additionalProperties: false, so vendor data has no lawful home (remundo's leftoverpushfield failing validation is the preview). Add one free-formextensionsobject, ignored by the core, on capability entries and the root. Converts dawn's attestation/capacity/risk-data asks from "missing features" into "extensions BEST accommodates". Highest-value candidate. - Security & privacy considerations for manifest content — prose stating the two-tier visibility model explicitly: the public root manifest stays coarse (no tenant identifiers, internal hostnames, capacity data); fine detail belongs in authenticated tenant manifests. Addresses the dawn gap-analysis enumeration/scraping concern and strengthens the I-D's Security Considerations for resubmission.
- Manifest caching guidance — non-normative: serve
/.well-known/bestwithETag+Cache-Control. (dawn wants static/dynamic property classification; plain HTTP semantics cover BEST's case.) -
deprecatedcapability status — the lifecycle enum isplanned → partial → active: birth but no death. Needed the first time a platform sunsets a capability; dawn requires lifecycle info in discovery. - Watch, don't build: cryptographic signing of discovery documents (dawn's anti-poisoning MUST — adopt whatever envelope dawn standardizes rather than inventing one; meanwhile document the TLS-as-trust-anchor stance in design-decisions) and channel-bound identity / verifier binding (agentproto's
-06security drafts — same logic). - Rejected by design: descriptive/class-based search — that's the registry/directory layer BEST deliberately deleted; BEST manifests are the substrate directories index. Add a positioning sentence to SPEC.md instead of a feature. MoQ transports are orthogonal to the HTTP/JSON binding.
Standards track (see table above)
- Submit the IANA registration — sent 2026-08-24 by email to iana@iana.org (provisional, spec ref = v0.9.2 tag); awaiting ticket + designated-expert review
- Submit the Internet-Draft — posted 2026-08-24: https://datatracker.ietf.org/doc/draft-dinuzzo-best-protocol/ (expires 2027-02-25; refresh with a -01 before then). ISE outcome: deferred, not rejected — the space is being chartered at the IETF (dawn + agentproto BoFs, IETF 126 in Nov); the ISE reconsiders if no WGs form or after initial RFCs, with a "substantial deployment" bar
- Engage the IETF BoF lists — subscribe to
dawn@ietf.org+agentproto@ietf.org; ask for BEST's inclusion indraft-jimenez-dawn-discovery-landscape(host-level self-description category); offer text for the "To be completed" /.well-known section ofdraft-moussa-dawn-gap-analysis
Operational
-
npm deprecate @behavioralstate/bsp-mcppointing atbest-mcp— done manually 2026-08-24 - npm trusted publishing (OIDC) for
best-mcp; revoke the bypass-2FA automation token - Run
best-validateto completion with credentials: dotquant tenant-level probes (needs--tenant+--api-key; root manifest CONFORMANT) and remundo authenticated probes. Remundo host identified 2026-08-24:dev.api.baas.remundo.com— root manifest CONFORMANT (0.9.1); tenantXML-INTmanifest fails the 0.9.2 discovery schema (capability entry carries apushblock — webhook leftover; drop it during the remundo 0.9.2 migration)
Recently resolved (2026-08-23)
- Correlation is first-class — new
correlationidenvelope attribute (CloudEvents extension): optional on commands, mandatory on events produced by a command, propagated across process chains; design decisions, MIGRATION.md specs/pages slimmed — discovery, commands, events, queries, and MCP transport reduced to concise references with normative pointers into SPEC.md (~1,400 lines dropped); unique content (design decisions, composing processes, comparisons) untouched- Webhooks removed — resolved the open "webhook signature specification" question by deleting the channel; design decisions, MIGRATION.md
- gRPC transport declaration removed — design decisions
- Removed-capability residue deleted — memory/registry/lifecycle tombstones and
memory.json; vocabulary lives in the registry worked example - Both deployments migrated to 0.9.x (dotquant.io, remundo.com); dotquant root manifest validated CONFORMANT with
best-validate0.1.0
Release history (recent)
| Version | Date | Highlights |
|---|---|---|
| spec/v0.9.2 | 2026-08-23 | First-class correlationid envelope attribute; webhook subscriptions and gRPC transport declaration removed; removed-capability residue deleted; specs/ pages slimmed |
| spec/v0.9.1 | 2026-07-30 | Command authorisation requirements (deny-by-default, actor binding, high-impact controls); schema selection relaxed to any server-owned identifier; same-identifier rule for selection/authz/dispatch. No wire change |
| spec/v0.9.0 | 2026-07-22 | BSP → BEST rename; conformant CloudEvents 1.0 profile; MIGRATION.md; standards artifacts |
| spec/v0.8.1 | 2026-07-22 | Consolidated SPEC.md; example dataschema fixes; OpenAPI synced with spec surface |
| spec/v0.8.0 | 2026-07 | A2A transport binding removed |