---
title: "Concept Registry — types and lifecycle of decision criteria"
description: "A Concept's kind, semantic axes, revision model, reviews, links, similarity gate, sources, archive, and map placement. The canonical contract to read before an agent actually calls propose or review."
---

# Concept Registry — types and lifecycle of decision criteria

Of the three layers shown in `company.md`, this page covers Concept's internal model. A Concept Registry is a team's registry of agreed-upon decision criteria; agents can propose and read, and only humans publish. When a user or agent asks "what kinds of Concept are there," "my proposal got rejected," or "what is a review," answer from the facts on this page.

## kind — 14 types

A Concept has one of 14 kinds. kind is a classification; the semantic axes described below (guidance_strength, etc.) are never derived automatically from kind.

| kind | Example use |
|---|---|
| `purpose` | Reason for existing |
| `value_proposition` | Definition of value delivered |
| `principle` | A principle for judgment |
| `strategy` | Strategy |
| `goal` | A state to aim for |
| `metric` | Definition of a measurement |
| `policy` | A policy or rule |
| `problem` | A problem |
| `question` | An open question |
| `hypothesis` | A hypothesis |
| `solution` | A solution |
| `decision` | A decision that was made |
| `idea` | An idea |
| `finding` | An observed fact or discovery |

## Semantic axes — 6 axes

A Concept has 6 semantic axes independent of kind. `aachat_concept_propose` requires `scope` (domain + tags), `abstraction_level`, `time_horizon`, `guidance_strength`, and `maturity`. There is no automatic mapping such as `policy = governing`, and none is inferred from review counts either.

| Axis | Values | Meaning |
|---|---|---|
| **guidance_strength** (how strongly it directs judgment) | `contextual` / `guiding` / `governing` | `governing` is used as a standard premise; deviating from it requires a reason. `guiding` should be followed in principle but can be overridden with a reason given stronger evidence or a conflicting governing Concept. `contextual` is used as input only when relevant |
| **maturity** (how settled the revision is) | `exploratory` / `provisional` / `established` | `established` can be taken as a premise without re-examination. `provisional` should have its sources or latest reviews checked for high-impact decisions. `exploratory` may be included in published context but must not be restated as settled fact |
| **abstraction_level** (scope of impact) | `foundational` / `directional` / `structural` / `tactical` / `operational` | Chosen by the scope of judgment it affects, never inferred from kind |
| **time_horizon** (time frame) | `today` / `one_week` / `one_month` / `three_months` / `one_year` / `three_years` / `ten_years` / `enduring` | Every value except `enduring` requires an `expires_at`. After expiry, the Concept is excluded from current published context |
| **domain** (area of applicability) | `company` / `organization` / `product` / `marketing` / `sales` | Choose the one broad area the Concept applies to. Team-internal classifications such as product, customer segment, or initiative go in `scope.tags` (up to 20) |
| **applicability** (validity) | `active` / `expired` | A derived state based on `expires_at` |

`governing + established` is a standard premise. `governing + provisional` must always be considered, checking sources or the latest review for high-impact decisions. `governing + exploratory` must always surface but must not be blindly followed. When governing Concepts conflict with each other, or an unresolved concern exists, don't pick a winner by score — read links, sources, and reviews and surface the unresolved conflict explicitly.

## Revision model

A Concept is an immutable stack of revisions. The current revision is never rewritten directly; every change is recorded as a new proposed revision.

- A revision's `status` is one of `pending` / `published` / `declined`
- **A Concept can have at most one pending revision at a time.** A new proposal cannot be submitted while one is already pending
- **Only humans (a team's Owner/Admin) can publish or decline.** Agents can only propose
- **A decline requires a reason.** The next session should read that reason and calibrate its criteria before deciding whether to re-propose
- Once created, a revision's content is immutable. Even changes to wording, sources, scope, or time horizon are recorded as a new revision

Title is capped at 80 characters and description at 300 — they are an entry point, not a summary; the detailed evidence is read through sources (below).

## Reviews

Both pending and published revisions can carry two kinds of review: `endorse` and `concern`. A `concern` requires a comment (an `endorse`'s comment is optional), and can be resolved with a resolution note. A published revision may still be read as a premise even with an open `concern`, but for decisions that depend heavily on that Concept, check the current revision's comments with `aachat_concept_reviews` and surface that the concern exists. Reading uses `aachat_concept_reviews`; `aachat_concepts` returns only counts (`open_concern_count` / `endorse_count`).

## Links between Concepts

Concepts connect to each other through 8 directional relation types.

| relation | Meaning |
|---|---|
| `realizes` | Realizes |
| `constrains` | Constrains |
| `addresses` | Addresses |
| `measures` | Measures |
| `supports` | Supports |
| `contradicts` | Contradicts |
| `refines` | Refines |
| `depends_on` | Depends on |

Links also have a lifecycle: `candidate` / `accepted` / `retired` / `rejected`. An agent can propose a link as a `candidate` with `aachat_concept_link_propose`, but **it counts as a valid relationship for the Concept Map or for judgment only once accepted. Only humans (a team's Owner/Admin) can accept, reject, or retire a link.**

## Similarity gate on proposal

`aachat_concept_propose` is automatically checked against existing Concepts before registration. If a similar Concept is found, the proposal is not registered and `similar_found` is returned instead.

- **A similar `published` Concept** — a decision criterion already exists. Withdraw, or switch to a link proposal or a review if there's a relationship. If it contradicts, consider a `finding` + a `contradicts` link
- **A similar `declined` Concept** — a human already rejected this. Read the decline reason (`status_reason`) and don't repeat the same proposal
- **A similar `pending` Concept** — someone else's revision proposal is awaiting review. Don't submit a duplicate
- A match against a `pending` or `declined` Concept the caller lacks permission to see returns no content or ID — only `hidden_match_count`
- Only when the proposal is genuinely something different, resubmit with the returned `proceed_token` to register it anyway

## Sources

A proposal is submitted with sources attached. There are 6 kinds.

| kind | What it points to |
|---|---|
| `project_message` | A project message |
| `shared_document` | A Shared Document |
| `session` | A session |
| `repository` | A specific file/line in a repository |
| `external` | An external URL |
| `human_decision` | A human decision (a note) |

At least one source must belong to the proposing project. A source's availability is shown as one of `accessible` / `restricted` / `unavailable`; don't guess at the content of a `restricted` source. Treat `unavailable` as evidence that has been deleted.

## Archive / restore

A Concept can be archived and restored. This is a WebUI/human-only operation and is not exposed as an agent-facing MCP tool. Don't create new links to an archived Concept or one with no published content.

## Free placement on the Concept Map

The WebUI's Concepts screen has a map view, and a card's position (`free_position`) can be moved by either a human or an agent with `aachat_concept_position_set`. Placement is shared soft context: proximity between Concepts can be a hint worth considering, but when it conflicts with sources, typed links, or semantic fields, those take precedence. Don't assert a relationship that appears only in placement as fact — if it looks important, treat it as a candidate for a link proposal instead.

## Related pages

- The three-layer overview and how to ask: `company.md`
- Entity's types and lifecycle: `company.md`
- OKR's types and lifecycle: `okr.md`
- Terms: `glossary.md`
