OKR — structure and lifecycle
The Objective/Key Result structure, the check-in contract, the draft/active/closed/cancelled lifecycle, owner, and links to Concept/Entity. The canonical contract to read before an agent registers, updates, or checks in an OKR.
Of the three layers shown in company.md, this page covers OKR's internal model. The OKR Registry is the canonical record of the outcomes a team wants to realize. An Objective is the change being aimed for, a Key Result is a measurement contract, and a check-in is a record of the value and confidence observed at that point in time. Project/Session is the work that realizes an outcome, Concept is the decision criteria that give an OKR its meaning, and Company Entity is a separate company-structure entity — neither is a substitute for OKR.
Structure
- Objective: title + description
- Key Result: 2 to 5 required. Each has a title, description, metric (what is measured), unit, baseline_value (the value at the start), and target_value (the goal value). baseline and target cannot be the same value
- Period:
starts_on<ends_on - Numeric values (baseline_value / target_value / a check-in's current_value) are sent and received as lossless decimal strings; docs and agents never auto-compute a percentage or achievement rate from them
Lifecycle
draft → active → closed / cancelled, one direction only.
| status | Meaning / constraint |
|---|---|
draft | The Objective, period, and KRs can be registered and changed |
active | KR definitions are frozen once activated. Activation requires an owner to be set and an initial check-in |
closed | The final check-in and a retrospective are saved together in a single operation to close it out |
cancelled | Closed out with a required reason |
A terminal state (closed / cancelled) is immutable and cannot be deleted. If the measurement contract itself turns out to be wrong, cancel the existing OKR and register a new one with the correct KRs.
The check-in contract
A check-in submits the current value for every KR at once, every time. KRs that haven't changed are not omitted either.
current_value: the value observed at that point in time (a decimal string). Never fabricate a value when the real measurement can't be obtainedconfidence: an integer from 0 to 10 per KR. Never aggregated into a single score for the whole OKRsummaryis the headline of that check-in. Reasons confidence dropped, blockers, uncertainty, and what to verify next go indescription- Check-ins are append-only records; the initial check-in at activation, a regular check-in, and the final check-in at close all use the same complete-snapshot contract
- Optimistic concurrency applies: pass the
updated_atyou last read, and if it conflicts with another change, re-read the latest state before resubmitting
Owner model
An OKR has at most one owner. A draft can be registered without an owner — an owner becomes required only at activation. The owner does not have to be human: an eligible, non-dormant agent participating in an active Project or DM in the team can be an owner too. Candidates are chosen from owner_candidates.
Links to Concept / Entity
An OKR can link to both Concepts and Entities. There is no relation type — it's a simple link that either exists or doesn't.
- A Concept link: used when that decision criterion or strategy is needed to understand what the OKR means
- An Entity link: used to show which part of the company structure the outcome targets
- Links cannot be changed once the OKR reaches a terminal state (closed / cancelled)
Change history
An OKR's lifecycle and definition changes are recorded as append-only events (registration, definition update, activation, owner change, Concept/Entity link added/removed, check-in created, close, cancel).
Related pages
- The three-layer overview and how to ask:
company.md - Concept's types and lifecycle:
concept-registry.md - Entity's types and lifecycle:
company.md - Terms:
glossary.md