Provenance
Status: Design landing Reference epics: INK-826 ADRs: ADR-018
The shape
Section titled “The shape”Every piece of content in the workspace’s world carries two independent kinds of provenance metadata — stored as first-class fields on the content — and is additionally characterized by two derived signals computed from the workspace graph.
| Name | Kind | Answers |
|---|---|---|
| Origin | Stored axis | Where did this content enter the workspace from? |
| Lifecycle | Stored axis | Where is this content in its workflow? |
| Weight | Derived signal | How much does the world point at this right now? |
| Standing | Derived signal | How much of the world has been built out of this? |
Origin and lifecycle are facts about a piece of content, recorded on it and examined directly. Weight and standing are functions over the workspace graph at a point in time, computed rather than stored.
Collapsing these into a single ranking, or presenting them as equivalent axes, produces downstream confusion because they are different kinds of thing. The two derived signals are also not interchangeable: they read different subgraphs and answer different questions about the content.
Origin (stored)
Section titled “Origin (stored)”Where did this content enter the workspace from?
| Value | Meaning |
|---|---|
| Authored | The user wrote it directly. |
| Imported | The user brought it in from an external source (Obsidian, Notion, etc.) at some time, with whatever citation the import pipeline preserved. |
| Agent-produced | The agent produced the content, acting on the user’s instructions. |
| Observed | The agent or a background task recorded an observation — a workspace event, a user interaction, an externally sensed signal. |
Origin is a factual record. It does not shift once set. It is the basis for honest attribution when the agent cites its own sources and for the agent to reason about the kind of claim content represents.
Invariants
Section titled “Invariants”- Agent writes are always
origin: agent-produced. Always. There is no “the agent helped me write this” shared-origin value. If the agent wrote it, the value is agent-produced. If the user edited agent-produced content, the edits are authored at the block level, but the page-level origin of the original agent production remains agent-produced. See the domain-rules page for the specific per-primitive rules. - Origin does not decay or transition. The four values are terminal. “Imported content that the user has since edited heavily” does not become authored; it remains imported. The user’s edits are separately attributable.
- Origin is set at the submit boundary and nowhere else. The submit boundary is the single point where origin is written; the domain rejects writes that don’t carry it.
Lifecycle (stored)
Section titled “Lifecycle (stored)”Where is this content in its workflow?
| Value | Meaning |
|---|---|
| Draft | In progress, explicitly not yet committed to by the author. |
| Candidate | Content the agent or the user has proposed for elevation but that has not been accepted. |
| Canonical | Content the author has accepted as representative of their current position or knowledge. |
| Retired | Content that was canonical but has been superseded. Not deleted; preserved with its supersession recorded. |
Lifecycle is a trajectory, not a fact. Content moves through statuses over time. The author controls the transitions; the agent can propose them.
Transition rules
Section titled “Transition rules”| From → To | Who can do it |
|---|---|
| Draft → Candidate | Author or agent |
| Draft → Canonical | Author only |
| Candidate → Canonical | Author only |
| Candidate → Retired | Author or agent |
| Canonical → Retired | Author only |
| Canonical → Draft (reopen) | Author only |
The agent can propose elevation to canonical (via the submit-boundary candidate surface — see Submit Boundary and INK-832). The agent cannot perform the elevation itself. This is architectural, not a permission check: the domain’s lifecycle-transition rules express this constraint, and no tool implementation can bypass it.
Imported content defaults to lifecycle: draft. The import flow offers a bulk-canonicalize affordance for users who want to accept their imported material wholesale. This is not automatic canonicalization by the agent; it is an authored act performed in bulk.
Why two stored axes, and not one
Section titled “Why two stored axes, and not one”Origin and lifecycle are orthogonal. A page can be:
- Authored and canonical — the user’s own settled definition.
- Authored and draft — a note the user is still working on.
- Imported and canonical — a reference the user has accepted.
- Imported and draft — content the user is still reviewing after import.
- Agent-produced and candidate — an inference the agent has proposed but the author has not accepted.
- Agent-produced and retired — an inference the agent made that the author later superseded.
Each combination calls for different agent behavior. Origin tells the agent what kind of claim this content represents; lifecycle tells the agent how settled it is. Collapsing them — for example, treating all agent-produced content as less settled than all authored content — would force the agent to ignore cases like the user’s own draft notes, which are authored but explicitly not settled. Two axes is the minimum to keep the distinctions the agent actually needs.
Weight (derived)
Section titled “Weight (derived)”How much does the world point at this right now, and how should the agent modulate its behavior on this page in this moment?
Weight is derived from the full relationship graph at a point in time, based on things like:
- How much other content points at it, cites it, is typed by it, or extends it.
- How recently it has been revisited, validated, or re-authored.
- Whether the author has explicitly marked it as structural (pinning a page, marking a type as foundational).
Weight changes whenever the graph changes. The agent uses weight as guidance for how carefully to treat a piece of content in the moment it is working on it: high-weight content means more care when proposing changes, more care when deriving further content from it.
Weight is not a gate
Section titled “Weight is not a gate”Weight does not authorize or block operations. It does not have a threshold above which different rules apply. It is a signal the agent consults, in the same way a human author informally consults their own sense of how central a piece of their work is to the rest.
No tool checks weight before proceeding. No workflow branches on weight crossing a threshold. Weight informs agent judgment and product presentation; it does not gate anything.
Standing (derived)
Section titled “Standing (derived)”How much of the world has been built out of this — how load-bearing is it to the world’s structure?
Standing is derived from the derivation subgraph specifically, not the full relationship graph. It reads how much canonical content descends from a given piece of content. A quiet source with few inbound references but many derivations from it has high standing; a heavily-referenced hub that nothing derives from has low standing despite its high weight.
Standing is defined only on canonical content
Section titled “Standing is defined only on canonical content”Draft and candidate content have no standing; they have not been accepted into the world in the load-bearing sense. Derivations from pre-canonical content still exist in the graph, but they do not confer standing on their source until that source is canonical. When a source transitions canonical → retired, its standing is preserved historically but does not accumulate further.
Standing is structural, not author-set
Section titled “Standing is structural, not author-set”Lifecycle carries author intent (promotion decisions); standing reflects the structural facts of what has been derived from a piece of content over time. The two are complementary, not overlapping. An author can elevate a page to canonical, but standing only accrues as other canonical content derives from it.
Standing is not a gate
Section titled “Standing is not a gate”Like weight, standing does not authorize or block operations. It informs agent behavior and product presentation without authorizing, blocking, or staging any operation.
Where standing shows up most concretely: retroactive-revision flag prominence scales to the standing of the content whose change propagated, and the agent treats proposed changes to high-standing content with proportionally greater care. See INK-829.
Why two derived signals, and not one
Section titled “Why two derived signals, and not one”Weight and standing may correlate in practice but are not redundant. They read different subgraphs and answer different questions:
- Weight reads the full relationship graph and informs the agent’s per-page, per-moment modulation. “How carefully should I handle this page right now?”
- Standing reads the derivation subgraph and describes the world’s structural dependence on the content. “How much of the world rests on this?”
A hub (many references, few derivations from) has weight but low standing. A quiet source (few references, many derivations from) has standing but modest weight. The agent consults them for different purposes; collapsing them would lose the distinction between a page the world points at and a page the world was built out of.
Summary shape
Section titled “Summary shape”| Origin | Lifecycle | Weight | Standing | |
|---|---|---|---|---|
| Kind | Stored fact | Stored trajectory | Derived signal | Derived signal |
| Transitions? | No (terminal) | Yes (rule-bound) | Changes with graph | Accrues on canonical derivations |
| Reads what? | — (fact) | — (fact) | Full relationship graph | Derivation subgraph, canonical only |
| Gates ops? | No (informs domain rules) | Yes (transition rules) | No | No |
| Set by | Submit boundary | Author (agent can propose) | Graph computation | Graph computation |
Four concepts, each different. Two stored axes plus two derived signals is the shape of provenance in Inklings.
Worked example
Section titled “Worked example”Moment 1 — Import shows origin and lifecycle being set at the submit boundary by an import pipeline. Moment 2 — Agent derivation shows agent-produced content entering as origin: agent-produced, lifecycle: candidate, then the author transitioning it to canonical. Moment 3 — Source edit is where standing starts to matter — the central magic-system page has high standing, and its edit propagates re-validation flags whose prominence scales with that standing.
What this page does not do
Section titled “What this page does not do”- Does not describe the storage schema for origin and lifecycle. See Database Schema.
- Does not describe the submit-boundary machinery that enforces these fields. See Submit Boundary.
- Does not describe how the derivation subgraph is stored and traversed. See Derivation Links.
- Does not describe the retroactive-revision queue that consumes standing for flag prominence. See Retroactive Revision.
Was this page helpful?
Thanks for your feedback!