Create ODR
Create a new Ontology Decision Record with the next sequential number, register it in the AgentDB graph, and link it to related ODRs and ADRs.
When to use
When an ontology design decision needs to be recorded. An ODR captures the decision (what was chosen) and any rules it produces (the normative artefact). It does NOT contain the deliberation — when a council session deliberated the decision, the session transcript lives separately in council/session-NNN-*.md; cite it from the ODR's ## Vote and Dissent / ## More Information body (or the optional council: frontmatter key where the project uses it). When the decision is author-only, no council reference is needed.
ODRs cover ontology-modelling decisions only. Schema-encoding decisions (how to express the ontology in JSON Schema, YAML, RDF, SHACL) belong on the ADR side — use adr-create.
Format — unified MADR (semantic-modelling + opda)
The normative spec is the project's own docs/ontology/odr/DCAP.md — read it in the repo you are authoring in. semantic-modelling and opda share one unified format: canonical MADR 4.x body + a six-key required frontmatter core plus three optional project-extension keys. (odr-review is DCAP-driven, so the live DCAP is always the authority; this template emits the unified shape.)
- Filename:
docs/ontology/odr/ODR-NNNN-<slug>.md — 4-digit zero-padded number, lowercase kebab-case slug. Sub-letter suffixes (ODR-0071a) permitted for child records.
- H1:
# <Title> — title only, no ODR-NNNN: prefix.
- Metadata: YAML frontmatter — six required keys + three optional project-extension keys (
kind, scope, council).
- Body: MADR spine —
## Context and Problem Statement → ## Considered Options → ## Decision Outcome (with a required ### Consequences H3) — plus optional named extensions.
Frontmatter
| Key |
Required |
Type |
Rule |
status |
yes |
enum |
proposed | accepted | rejected | deprecated | superseded (lowercase) |
date |
yes |
string |
ISO YYYY-MM-DD |
tags |
yes |
list |
Cross-cutting categorisation. May be empty [] |
supersedes |
yes |
list |
ODR IDs replaced. Intra-corpus only (ODR↔ODR). May be empty |
depends-on |
yes |
list |
ODR or ADR IDs cited. Cross-corpus allowed (ODR↔ADR). May be empty |
implements |
yes |
list |
ODR IDs (intra-corpus) or external schema URIs (pass-through). May be empty |
kind |
optional |
enum |
methodology | architecture | pattern | mapping | programme. Project-extension |
scope |
optional |
list |
Typed source-data refs (e.g. pdtf-v3:propertyPack.titleNumber). Project-extension |
council |
optional |
string |
Session id (e.g. session-001) when council-derived. Project-extension |
Project policy on the optional keys (the shared schema treats them as optional; each repo may require them locally, enforced by its own DCAP):
- opda uses
kind and scope (PDTF source-data traceability) and council.
- semantic-modelling omits all three — it classifies via
tags and records council provenance in the ## Vote and Dissent body extension. Don't add empty optional keys to sm ODRs.
Kind enum (when used)
methodology — decisions about how decisions are made
architecture — framework decisions (namespace, governance, validation scheme)
pattern — reusable modelling conventions
mapping — specific source→ontology mappings
programme — workplans, roadmaps, dependency graphs
Body sections (MADR spine + named extensions, in DCAP order)
| Order |
Heading |
Required |
What goes here |
| 1 |
## Context and Problem Statement |
yes |
Why the decision was needed. The problem, not the chosen option. 1–3 paragraphs |
| 2 |
## Decision Drivers |
no |
Bulleted forces (constraints, qualities, stakeholder concerns) |
| 3 |
## Considered Options |
yes |
All options evaluated including the chosen one alongside rejected alternatives — never only the losers |
| 4 |
## Decision Outcome |
yes |
Chosen option: "X", because Y. then prose. Contains the H3s below |
| 4.1 |
### Consequences |
yes (under §4) |
Flat bullet list — * Good, because … / * Bad, because … / * Neutral, because …. NO Good/Bad/Neutral subheadings |
| 4.2 |
### Confirmation |
no |
How compliance is verified |
| 4.3 |
### Supersession scope: |
no |
When partial supersession applies — what survives |
| 5 |
## Pros and Cons of the Options |
no |
Per-option deliberation detail (one ### <Option> each) |
| 6 |
## More Information |
no |
Links, related records, council transcript |
| 7 |
## Rules |
no (named ext) |
Durable normative content scoped to this ODR (tables, Turtle, SHACL, conventions, anti-patterns) |
| 8 |
## Vote and Dissent |
no (named ext) |
Compact council-verdict summary (full transcript in the council/ sibling) |
| 9 |
## Amendments |
no (named ext) |
Running list of post-acceptance amendments |
| 10 |
## Mapping |
no (named ext) |
Absorbed .code.md companion matrices / mapping tables |
Steps
Find next number — Glob for docs/ontology/odr/ODR-*.md and parse the 4-digit number after the ODR- prefix. Filter out README.md, INDEX.md, _template.md, DCAP.md, DCAP-audit-log.md. Allocate the next plain number unless the user requests a sub-letter explicitly.
Slugify title — Lowercase, hyphen-separated. Drop punctuation; collapse runs of hyphens.
Optional keys — If the repo's DCAP requires kind / scope (opda), determine them (ask about kind if not obvious from the title). If the repo omits them (semantic-modelling), skip — do not emit empty kind/scope/council.
Create ODR file — Write the file at docs/ontology/odr/ODR-NNNN-<slug>.md using this template (delete the commented optional-key lines unless the repo uses them):
---
status: proposed
date: <today's date YYYY-MM-DD>
tags: []
supersedes: []
depends-on: []
implements: []
# Optional project-extension keys — include only where the repo's DCAP uses them
# (opda requires kind + scope; semantic-modelling omits all three):
# kind: <methodology|architecture|pattern|mapping|programme>
# scope: [] # typed source-data refs, e.g. pdtf-v3:propertyPack.titleNumber
# council: session-NNN
---
# <Title>
## Context and Problem Statement
<!-- Why the decision was needed. 1–3 paragraphs. The problem, NOT the chosen option. -->
## Considered Options
<!-- All options evaluated, INCLUDING the chosen one alongside the rejected alternatives.
Never list only the losers — that invites confirmation-shaped records. -->
* **Option A (chosen) — <name>.** <one line on what it is>
* **Option B — <name>.** Rejected: <fatal flaw in one sentence>.
## Decision Outcome
Chosen option: "<Option A>", because <one-sentence justification>.
<!-- then body prose elaborating the decision -->
### Consequences
* Good, because <…>
* Bad, because <…>
* Neutral, because <…>
## Rules
<!-- OPTIONAL named extension. Normative content the decision produces: tables, Turtle,
SHACL stubs, SKOS scheme links, naming conventions, anti-patterns. As long as needed.
Omit the section entirely if the decision produces no durable rules. -->
## More Information
<!-- OPTIONAL. Links: source-schema clauses, related ODRs/ADRs, external citations,
and the council transcript (council/session-NNN-*.md) when the decision was deliberated. -->
Store in AgentDB — Call mcp__ruflo__agentdb_hierarchical-store with:
- path:
odr/ODR-NNNN
- value:
{ "id": "ODR-NNNN", "title": "<title>", "status": "proposed", "date": "<today>", "tags": [], "supersedes": [], "depends-on": [], "implements": [], "file": "docs/ontology/odr/ODR-NNNN-<slug>.md" } — include "kind", "scope", "council" only when the ODR carries them.
Find related records — Call mcp__ruflo__memory_search with the title in namespace odr-patterns (and adr-patterns if cross-corpus relevance is plausible). Add matches to ## More Information as human-readable links; for typed dependencies, suggest adding to depends-on: or implements:.
Store pattern — Call mcp__ruflo__memory_store in namespace odr-patterns with key ODR-NNNN and the title + context as value for future semantic search.
Report — Output the created file path, ODR number, and any related records found.
Notes
- Inverse properties (
superseded-by, depended-on-by, implemented-by) are NEVER authored in frontmatter — they are derived at index time by odr-index.
- DACI fields (
deciders, consulted, informed, decision-makers, author) are NOT emitted. Git log is the authorship record.
- The cross-corpus rule:
supersedes: and intra-ODR implements: MUST stay intra-corpus; depends-on: and external-URI implements: may cross.
- Partial supersession is recorded in a
### Supersession scope: H3 under ## Decision Outcome (which entries of the prior survive) — there is no separate frontmatter field.
- The ODR/ADR boundary: ontology-modelling decisions are ODRs; schema-encoding decisions are ADRs.
- This skill MUST stay in lockstep with
~/.claude/skills/odr-index/SKILL.md (the indexer) and each repo's docs/ontology/odr/DCAP.md (the authority). When the unified format changes, update all three together.
1---2name: odr-create3description: Create a new Ontology Decision Record (ODR) with sequential numbering and AgentDB registration4---56# Create ODR78Create a new Ontology Decision Record with the next sequential number, register it in the AgentDB graph, and link it to related ODRs and ADRs.910## When to use1112When an ontology design decision needs to be recorded. An ODR captures the *decision* (what was chosen) and any *rules* it produces (the normative artefact). It does NOT contain the deliberation — when a council session deliberated the decision, the session transcript lives separately in `council/session-NNN-*.md`; cite it from the ODR's `## Vote and Dissent` / `## More Information` body (or the optional `council:` frontmatter key where the project uses it). When the decision is author-only, no council reference is needed.1314ODRs cover ontology-modelling decisions only. Schema-encoding decisions (how to express the ontology in JSON Schema, YAML, RDF, SHACL) belong on the ADR side — use `adr-create`.1516## Format — unified MADR (semantic-modelling + opda)1718The normative spec is the project's own `docs/ontology/odr/DCAP.md` — **read it in the repo you are authoring in.** semantic-modelling and opda share **one unified format**: canonical [MADR 4.x](https://adr.github.io/madr/) body + a six-key required frontmatter core plus three optional project-extension keys. (`odr-review` is DCAP-driven, so the live DCAP is always the authority; this template emits the unified shape.)1920- **Filename**: `docs/ontology/odr/ODR-NNNN-<slug>.md` — 4-digit zero-padded number, lowercase kebab-case slug. Sub-letter suffixes (`ODR-0071a`) permitted for child records.21- **H1**: `# <Title>` — title only, no `ODR-NNNN:` prefix.22- **Metadata**: YAML frontmatter — six required keys + three optional project-extension keys (`kind`, `scope`, `council`).23- **Body**: MADR spine — `## Context and Problem Statement` → `## Considered Options` → `## Decision Outcome` (with a required `### Consequences` H3) — plus optional named extensions.2425### Frontmatter2627| Key | Required | Type | Rule |28|---|---|---|---|29| `status` | yes | enum | `proposed` \| `accepted` \| `rejected` \| `deprecated` \| `superseded` (lowercase) |30| `date` | yes | string | ISO `YYYY-MM-DD` |31| `tags` | yes | list | Cross-cutting categorisation. May be empty `[]` |32| `supersedes` | yes | list | ODR IDs replaced. Intra-corpus only (ODR↔ODR). May be empty |33| `depends-on` | yes | list | ODR or ADR IDs cited. Cross-corpus allowed (ODR↔ADR). May be empty |34| `implements` | yes | list | ODR IDs (intra-corpus) or external schema URIs (pass-through). May be empty |35| `kind` | **optional** | enum | `methodology` \| `architecture` \| `pattern` \| `mapping` \| `programme`. Project-extension |36| `scope` | **optional** | list | Typed source-data refs (e.g. `pdtf-v3:propertyPack.titleNumber`). Project-extension |37| `council` | **optional** | string | Session id (e.g. `session-001`) when council-derived. Project-extension |3839**Project policy on the optional keys** (the shared schema treats them as optional; each repo may require them locally, enforced by its own DCAP):40- **opda** uses `kind` and `scope` (PDTF source-data traceability) and `council`.41- **semantic-modelling** omits all three — it classifies via `tags` and records council provenance in the `## Vote and Dissent` body extension. Don't add empty optional keys to sm ODRs.4243### Kind enum (when used)4445- `methodology` — decisions about how decisions are made46- `architecture` — framework decisions (namespace, governance, validation scheme)47- `pattern` — reusable modelling conventions48- `mapping` — specific source→ontology mappings49- `programme` — workplans, roadmaps, dependency graphs5051### Body sections (MADR spine + named extensions, in DCAP order)5253| Order | Heading | Required | What goes here |54|---|---|---|---|55| 1 | `## Context and Problem Statement` | yes | Why the decision was needed. The problem, not the chosen option. 1–3 paragraphs |56| 2 | `## Decision Drivers` | no | Bulleted forces (constraints, qualities, stakeholder concerns) |57| 3 | `## Considered Options` | yes | All options evaluated **including the chosen one alongside rejected alternatives** — never only the losers |58| 4 | `## Decision Outcome` | yes | `Chosen option: "X", because Y.` then prose. Contains the H3s below |59| 4.1 | `### Consequences` | yes (under §4) | Flat bullet list — `* Good, because … / * Bad, because … / * Neutral, because …`. NO Good/Bad/Neutral subheadings |60| 4.2 | `### Confirmation` | no | How compliance is verified |61| 4.3 | `### Supersession scope:` | no | When partial supersession applies — what survives |62| 5 | `## Pros and Cons of the Options` | no | Per-option deliberation detail (one `### <Option>` each) |63| 6 | `## More Information` | no | Links, related records, council transcript |64| 7 | `## Rules` | no (named ext) | Durable normative content scoped to this ODR (tables, Turtle, SHACL, conventions, anti-patterns) |65| 8 | `## Vote and Dissent` | no (named ext) | Compact council-verdict summary (full transcript in the `council/` sibling) |66| 9 | `## Amendments` | no (named ext) | Running list of post-acceptance amendments |67| 10 | `## Mapping` | no (named ext) | Absorbed `.code.md` companion matrices / mapping tables |6869## Steps70711. **Find next number** — `Glob` for `docs/ontology/odr/ODR-*.md` and parse the 4-digit number after the `ODR-` prefix. Filter out `README.md`, `INDEX.md`, `_template.md`, `DCAP.md`, `DCAP-audit-log.md`. Allocate the next plain number unless the user requests a sub-letter explicitly.72732. **Slugify title** — Lowercase, hyphen-separated. Drop punctuation; collapse runs of hyphens.74753. **Optional keys** — If the repo's DCAP requires `kind` / `scope` (opda), determine them (ask about `kind` if not obvious from the title). If the repo omits them (semantic-modelling), skip — do not emit empty `kind`/`scope`/`council`.76774. **Create ODR file** — `Write` the file at `docs/ontology/odr/ODR-NNNN-<slug>.md` using this template (delete the commented optional-key lines unless the repo uses them):7879 ```markdown80 ---81 status: proposed82 date: <today's date YYYY-MM-DD>83 tags: []84 supersedes: []85 depends-on: []86 implements: []87 # Optional project-extension keys — include only where the repo's DCAP uses them88 # (opda requires kind + scope; semantic-modelling omits all three):89 # kind: <methodology|architecture|pattern|mapping|programme>90 # scope: [] # typed source-data refs, e.g. pdtf-v3:propertyPack.titleNumber91 # council: session-NNN92 ---9394 # <Title>9596 ## Context and Problem Statement9798 <!-- Why the decision was needed. 1–3 paragraphs. The problem, NOT the chosen option. -->99100 ## Considered Options101102 <!-- All options evaluated, INCLUDING the chosen one alongside the rejected alternatives.103 Never list only the losers — that invites confirmation-shaped records. -->104105 * **Option A (chosen) — <name>.** <one line on what it is>106 * **Option B — <name>.** Rejected: <fatal flaw in one sentence>.107108 ## Decision Outcome109110 Chosen option: "<Option A>", because <one-sentence justification>.111112 <!-- then body prose elaborating the decision -->113114 ### Consequences115116 * Good, because <…>117 * Bad, because <…>118 * Neutral, because <…>119120 ## Rules121122 <!-- OPTIONAL named extension. Normative content the decision produces: tables, Turtle,123 SHACL stubs, SKOS scheme links, naming conventions, anti-patterns. As long as needed.124 Omit the section entirely if the decision produces no durable rules. -->125126 ## More Information127128 <!-- OPTIONAL. Links: source-schema clauses, related ODRs/ADRs, external citations,129 and the council transcript (council/session-NNN-*.md) when the decision was deliberated. -->130 ```1311325. **Store in AgentDB** — Call `mcp__ruflo__agentdb_hierarchical-store` with:133 - path: `odr/ODR-NNNN`134 - value: `{ "id": "ODR-NNNN", "title": "<title>", "status": "proposed", "date": "<today>", "tags": [], "supersedes": [], "depends-on": [], "implements": [], "file": "docs/ontology/odr/ODR-NNNN-<slug>.md" }` — include `"kind"`, `"scope"`, `"council"` **only when the ODR carries them**.1351366. **Find related records** — Call `mcp__ruflo__memory_search` with the title in namespace `odr-patterns` (and `adr-patterns` if cross-corpus relevance is plausible). Add matches to `## More Information` as human-readable links; for typed dependencies, suggest adding to `depends-on:` or `implements:`.1371387. **Store pattern** — Call `mcp__ruflo__memory_store` in namespace `odr-patterns` with key `ODR-NNNN` and the title + context as value for future semantic search.1391408. **Report** — Output the created file path, ODR number, and any related records found.141142## Notes143144- Inverse properties (`superseded-by`, `depended-on-by`, `implemented-by`) are NEVER authored in frontmatter — they are derived at index time by `odr-index`.145- DACI fields (`deciders`, `consulted`, `informed`, `decision-makers`, `author`) are NOT emitted. Git log is the authorship record.146- The cross-corpus rule: `supersedes:` and intra-ODR `implements:` MUST stay intra-corpus; `depends-on:` and external-URI `implements:` may cross.147- Partial supersession is recorded in a `### Supersession scope:` H3 under `## Decision Outcome` (which entries of the prior survive) — there is no separate frontmatter field.148- The ODR/ADR boundary: ontology-modelling decisions are ODRs; schema-encoding decisions are ADRs.149- This skill MUST stay in lockstep with `~/.claude/skills/odr-index/SKILL.md` (the indexer) and each repo's `docs/ontology/odr/DCAP.md` (the authority). When the unified format changes, update all three together.