OKF v0.2 — provenance, trust, lifecycle & computation vocabulary
The full optional vocabulary from §5 (provenance, trust, lifecycle) and
§10 (Attested Computation). All of it is optional: a concept carrying
only type is conformant (§11). The target spec version is pinned in
okf-v0.2-spec-summary.md — this file does not
restate it.
Two rules govern everything below:
- Derive trust; never store a verdict. OKF records objective signals
(
author,usage_count,last_modified,verifiedevents). It does not store a credibility score or a trust tier — those are inferred by the consumer. Never write acredibility,score,trust, ortierfield. - Absence carries meaning, not rejection. An unverified concept is distinguishable from a verified one, but is never rejected. Missing optional fields are legal.
1. Provenance: sources (§5.1)
The materials a concept derives from, external or internal to the bundle.
sources: - id: ga4-schema # Optional stable key; needed for per-claim citation. resource: https://developers.google.com/analytics/bigquery/export-schema title: GA4 BigQuery Export schema # Optional label. author: team:ga4-docs # Optional — actor convention (§7). Authority signal. usage_count: 5000 # Optional — adoption / liveness signal. last_modified: 2026-05-30 # Optional — YYYY-MM-DD; source recency signal.usage_window: { from: 2026-06-01, to: 2026-06-30 } # Frames usage_count; sibling of sources.Per entry:
resource— REQUIRED within an entry. Either a followable artifact (an absolute URL, a bundle-relative/path, or a path intoreferences/) or a scope descriptor it cannot follow (e.g.all queries in BigQuery project X).id— optional stable key; SHOULD be present when the body cites the source. Citations join onid, not list position, because agents reorder these lists constantly.title— optional human label.
Credibility signals (each optional, each an objective per-source fact — OKF records the signal, never a verdict):
author— who/what produced the source (actor convention, §7). Authority.usage_count— how oftenresourcewas exercised overusage_window. Adoption/liveness. Coarse: read it as alive-vs-dead and order-of-magnitude and trend, not a precise cross-kind ranking.last_modified— when the source itself last changed (YYYY-MM-DD). Recency; distinct fromgenerated.at(when the concept was written).usage_window— written once as a sibling ofsources; a{ from, to }range framing everyusage_count. A single entry MAY carry its own to override.
Per-claim attribution uses a markdown footnote whose label is a
sources[].id:
The `events_` table is sharded daily as `events_YYYYMMDD`.[^ga4-schema]
[^ga4-schema]: GA4 BigQuery Export schemaThe label is the join key into sources; consumers resolve attribution through
the matching entry, not by parsing the footnote prose. Lineage is expressed
through links (§6), not a dedicated field: when a resource points at another
OKF concept, the derivation edge already exists in the graph.
2. Trust: generated and verified (§5.2)
generated = how the current content was produced. verified = who/what has
confirmed it. Kept distinct: who wrote a concept need not be who confirmed
it.
generated: { by: reference_agent/gemini-2.5-pro, at: 2026-06-20T22:53:05Z }generated.by— REQUIRED withingenerated. An actor (§7).generated.at— ISO 8601 datetime; the content's last meaningful change.
verified: - { by: human:ahormati, at: 2026-06-25T09:00:00Z } - { by: process:finance-nightly, at: 2026-06-26T02:00:00Z }verified— a list of{ by, at }events (actor + ISO 8601 datetime). Multiple entries capture independent checks. "How recently" = the latestat.- Independent of
generated.at: content can change without re-confirmation, and facts can be re-confirmed without regeneration. - A single verifier MAY be written as one bare mapping (no list dash); consumers MUST treat a bare mapping as a one-element list:
verified: { by: human:ahormati, at: 2026-06-25T09:00:00Z }3. Trust tiers (§5.3) — derived, never stored
A consumer derives the tier from verified, lowest to highest:
verified state |
Derived tier |
|---|---|
No verified key |
unverified |
verified by non-human: actors only |
machine-confirmed |
verified includes a human:<id> actor |
human-reviewed |
Tiers are advisory signals, not access control. A concept with no trust
frontmatter is still consumable. Do not persist the tier into frontmatter —
compute it on read from verified.
4. Lifecycle: status and stale_after (§5.4, §5.5)
status: stable # draft | stable | deprecated (absent ⇒ stable)stale_after: 2026-09-23 # absolute date YYYY-MM-DD; stale when today >= stale_afterstatus:draft(not yet reviewed) ·stable(default, ready) ·deprecated(kept for links/history). Absent ⇒stable.stale_after: an absolute date, not a relative TTL, so staleness is a plain date comparison independent of when the concept was read.
5. Attested Computation (§10) — overview
An Attested Computation is a standalone concept (type: Attested Computation)
carrying a sanctioned way to compute a value, so a consumer can confirm the
value was produced by running it rather than improvised. A concept that needs the
value (Metric, BigQuery Table) links to it with a normal markdown link.
Contract fields (top-level frontmatter, in addition to the §5 families):
runtime— REQUIRED for this type. How to run the computation (and how the executor/attester interpret it and whatparametersmean). E.g.bigquery,postgres,dbt,python,Looker.parameters— list of typed named holes:{ name, type, required }. Binding semantics followruntime.computation— optional path (§6.2) to a file holding the computation, used instead of an inline body fence. Absent ⇒ the body# Computationfence is the computation.executor—resourcenames run instructions/code;receiptdeclares the fields a run must return (e.g.[job_id, executed_sql, result]).attester—resourcenames deterministic (no-LLM) code that inspects a receipt and returns a verdict; meant to run consumer-side.
type: Attested Computationruntime: bigqueryparameters: - { name: year, type: integer, required: true }executor: resource: references/skills/run-on-bq.md receipt: [job_id, executed_sql, result]attester: resource: references/attesters/revenue.pyProvide the computation inline (one fenced block under # Computation) or by
file (computation: path, omit the fence). The agent MAY supply only
values for declared parameters; it MUST NOT author or edit the computation.
Verification vs. attestation (§10.6): verified (§5.2) confirms the
definition still matches policy — doc-level, recorded in the bundle.
Attestation confirms a single run produced the value the sanctioned way —
per-call, runtime, not stored in the bundle. Both exist and are distinct.
Runtime artifacts (receipts, verdicts) are never committed to the bundle.
6. Worked frontmatter (a fully-signalled concept)
---type: Metrictitle: Revenuedescription: Recognized revenue for a fiscal year.tags: [finance, revenue]status: stablestale_after: 2026-12-31generated: { by: reference_agent/gemini-2.5-pro, at: 2026-06-20T22:53:05Z }verified: - { by: human:ahormati, at: 2026-06-25T09:00:00Z }sources: - id: rev-policy resource: https://wiki.acme/finance/revenue-recognition title: Revenue recognition policy author: team:finance last_modified: 2026-05-30---Derived (not stored): trust tier = human-reviewed (a human: verifier is
present); staleness = fresh until 2026-12-31.