Authoring Flows#
There are three implemented ways to arrive at a reviewed oracle pack. They differ only in how the pack is produced; all three then converge on the same generation stages, the same gold gate, and the same publication contract described in Pipeline Overview. That convergence is the design: a pack drafted with model assistance receives exactly the same executable scrutiny as one typed by hand, so the authoring route never becomes a way to earn a weaker guarantee.
Flow |
Input |
Where the oracle comes from |
|---|---|---|
Manual |
A domain source plus a local backend or an HTTPS endpoint |
Hand-authored by the operator. |
Assisted from a conventional source |
A source declaration, a domain brief (the human-reviewed description of what the source is for), and a probe plan (the human-reviewed list of calls intake may execute against the source) |
A |
Assisted from an MCP server |
An MCP server, a domain brief, and a probe plan |
The certified MCP server, reached through a gateway that exposes BFCL Oracle HTTP v1. |
Read the diagram left of Reviewed oracle pack as the part that differs per flow, and everything right of it as the part that does not.
The manual flow reaches the pack directly because there is no source to certify; the two assisted flows share one source-intake stage, one certification ladder, and one review-and-freeze boundary, and the MCP flow joins that intake stage behind a gateway.
flowchart TB
M0["Manual<br/>hand-authored oracle and declarative files"]
C0["Conventional source<br/>local_python tree or http_package session<br/>plus domain brief and probe plan"]
K0["MCP server<br/>plus domain brief and probe plan"]
K1["Discovery pins implementation identity<br/>and the paginated catalog digest"]
K2["Gateway exposes BFCL Oracle HTTP v1"]
I1["Shared intake<br/>source identity, reviewed catalog,<br/>descriptor, measured probe records"]
I2["Certification tier derived by the pipeline<br/>A0, A1, or A2"]
I3["Model exposure authorized, evidence approved,<br/>drafts proposed and assembled"]
I4["Review packet and release approval"]
FZ{"Freeze as gold"}
STOPF["Refuse freeze"]
PACK["Reviewed oracle pack"]
S1["Stage 1 — prepare"]
S2{"Stage 2 — Gold eligibility gate"}
STOPG["Refuse generation"]
S3["Stages 3 to 12<br/>expand, replay against the oracle,<br/>verify and atomically publish"]
OUT["benchmark.parquet<br/>run_manifest.json"]
M0 -->|"no intake: nothing to certify"| PACK
C0 --> I1
K0 --> K1 --> K2 --> I1
I1 --> I2 --> I3 --> I4 --> FZ
FZ -->|"below A2"| STOPF
FZ -->|A2| PACK
PACK --> S1 --> S2
S2 -->|"not gold-eligible"| STOPG
S2 -->|"gold-eligible"| S3 --> OUT
The diagram has two refusal points for a reason. A lower-tier source may be drafted and reviewed, so the tier is checked where it matters — at freeze — rather than being used to block exploration. The gold gate then re-derives eligibility from the frozen pack itself, which is why a pack that arrived through model assistance cannot enter generation on the strength of its authoring history alone.
The Stages 3 to 12 node is collapsed here because it is identical for all three flows. Pipeline Overview draws the same run with every stage named, including which two are optional and how a disabled stage is bypassed.
In practical terms, Reviewed oracle pack is the input to Stage 1: users stop editing
authoring-workspace drafts at that boundary and generation reads only the reviewed pack
and its generation configuration. Follow One Task Through the Pipeline shows how one template
inside that pack changes as it passes through Stages 1–12.
The Guided Command Sequence#
Both assisted flows run through one stateful guided command that prints the next safe command whenever a gate refuses progress:
author— resolve the source declaration and produce transport-neutral evidence and certification.answer— apply any digest-bound open questions the evidence raised.apply-policy— for clean native-v2 evidence, produce separate model-exposure and evidence records from the reviewed organizational policy. Exceptional evidence uses the granularauthorizeandapprove --boundary evidencecommands instead.draft— run bounded, cached, structured model calls.assemble— bind those drafts into a loadable candidate pack, a pack assembled from drafts that has not yet been reviewed, approved, or frozen.review— assemble the review packet: independently verified certification, fresh validation, answered questions, and the complete candidate pack.release— load that exact packet, ask for one semantic/risk confirmation, then record approval, freeze, and publish while committing each phase separately.
Held-out status and the probe plan are settled at the first command rather than
deferred. A reviewed policy may supply the held-out decision; otherwise the operator
states it explicitly. A source meant to reach A1 or A2 needs its probe plan at that
point too, since those tiers are earned from observed outcomes and nothing later can
supply them.
Two Trust Boundaries, Not Two Reviewers#
The most important structural point in the assisted flows is that letting a model read evidence and letting a pack be released are two separate trust decisions, taken at different times against different digest-bound subjects. These are boundaries in the workflow, not a requirement for two different reviewers.
The pre-model side uses two records: exposure authorization and evidence approval. For clean evidence, one reviewed organizational policy may produce both records without a per-run human approval. The release side uses a human record approving a specific review packet with fresh validation evidence. Pre-model authorization cannot be replaced by final release approval, and approving a release does not retroactively legitimize a model request that was never authorized. Editing any upstream artifact invalidates the downstream packet and its approval, so an approval always refers to bytes that still exist unchanged.
The normal policy-backed flow therefore asks the developer to approve once, at release. If evidence has unresolved gaps, migration records, or advisory findings, policy refuses to accept it and the granular human-review path remains available. That fallback does not compare the identities on its records and does not require two people; an organization may still impose separation of duties.
Current Limitations#
Live source intake is disabled by default for every built-in adapter. Enablement comes from a reviewed rollout policy block or from strict environment overrides, and the effective decision is recorded in the resolved authoring configuration:
export BFCL_ENABLE_LOCAL_PYTHON=1
export BFCL_ENABLE_MCP_MODE_A=1
Malformed values and unknown adapter kinds fail closed, and the gate applies only to operations that inspect or execute a source. Offline artifact verification, review, approval, and freeze do not require it.
local_python and MCP Mode A have publication adapters. An http_package source shares intake, review, and freeze, but publication is deliberately refused until an independently verified publication adapter exists.
MCP Mode B and Mode C are not implemented.