The OTO catalog
Pack · software

software-architecture @1

Software estate: systems, components, interfaces, data, environments, decisions and risks.

by Cynergis · embeds the ontology software-architecture@5 · engine >=0.4

Install

/plugin marketplace add Cynergis/oto-registry
/plugin install software-architecture@cynergis

The engine plugin oto comes with it. Then the pack's start skill begins a project from the installed copy: oto init --name "<project>" --pack "${CLAUDE_PLUGIN_ROOT}" --project <root>. At a terminal: oto registry add https://github.com/Cynergis/oto-registry, oto pack add software-architecture, oto init --pack software-architecture.

The ontology

software-architecture@5: 14 classes, 20 relations, 4 rules, 3 actions, extends oto-core.

ClassWhat it isThe question it answersWhy it exists
DocumentA source document in the corpus: a design, a review, a standard, a transcript.Where is this written down?Every fact needs a checkable source, and the source is a file with its own date.
ActionSomething that can be done about an entity, described the way an MCP server describes a tool and bound to the graph. Oto lists it; the caller invokes it; the recorded run is evidence.What can be done about this, and how?The binding between an entity, the tool that acts on it, its inputs, its credentials by name and its preconditions is otherwise tribal knowledge in an agent's prompt; as a fact it is versioned, reviewed and shared. Oto never invokes it.
SystemA named application or platform that a team owns and a user or another system consumes.What is this thing, and who owns it?A system is the unit people name in conversation and the unit ownership attaches to, so it has to exist even though it is coarse.
ComponentA part of a system deployed or released as a unit: a service, a job, a library, a front end.What actually gets deployed, and what does it touch?Change and failure happen at the deployable unit, not at the system, so impact questions need this level.
InterfaceA contract others depend on: an API, an event topic, a file feed, a database view.If we change this, who breaks?Coupling lives in the contracts others depend on, so the contract must be a node that both sides can point at.
DataStoreA place data lives: a database, a bucket, a queue, a cache, a warehouse table.Where does this data live, and who writes it?Two writers to one store is the commonest quiet cause of inconsistency, and it is only visible if the store is a node.
EnvironmentA place components run: production, staging, a region, a tenant.Where does this run, and is the answer the same in production?Topology differs between environments, and an answer that ignores that is misleading in an incident.
TeamThe group accountable for something. Attach ownership to a team, not to a person.Who do I call?Accountability must point at a group rather than a person, because people move and the question does not.
CapabilityA business capability the estate supports. This is what the business asks about.What does the business lose if this is down?This is the only class a non-engineer will use, so it must exist in their words rather than being inferred from component names.
RequirementA stated need, functional or otherwise, that something must satisfy.What must this satisfy, and does it?A stated need outlives the component that meets it, and a replacement must satisfy the same thing.
DecisionRecordA recorded architecture decision: the choice, the alternatives, the reason, the consequences.Why is it like this?Architecture without recorded reasons is re-litigated every year, and the reason has its own date and author.
RiskA known way this can hurt: a single point of failure, an end of support, a concentration.What is fragile, and what are we doing about it?A risk nobody can trace to a component is not actionable, so it must point at what it threatens.
RunbookThe documented way to operate or recover something.How do I operate or recover this at three in the morning?The operating procedure is a distinct artifact with its own currency, and it is the thing an incident needs.
RepositoryWhere a component's code lives: a source repository, recorded before it exists (intended) and observed once it does.Where is the code?A component without a repository cannot be changed, and an architecture graph that cannot say where the code lives cannot be acted on. Recorded as intended before the repository exists, it is the fact an action realises.
RelationFromToMeaning
citesDocumentDocumentThis document refers to that one, so a fact traced to it can be traced one step further.
acts_onActionThe entity a recorded run of this action read or changed.
executed_byActionWho is accountable for invoking this action: a team, never a person.
part_ofComponent|Interface|DataStoreSystemThis belongs to that system.
owned_bySystem|Component|Interface|DataStore|CapabilityTeamThe team accountable.
exposesSystem|ComponentInterfaceThe contract something publishes.
consumesSystem|ComponentInterfaceA contract something depends on. This is where coupling lives.
depends_onSystem|ComponentSystem|ComponentThe consumer needs the provider to work. Usually derived from consumes and exposes, and stated only when a document says so.
reads_fromComponentDataStoreA component reading this store.
writes_toComponentDataStoreA component writing this store. Two writers to one store is worth knowing about.
runs_inComponent|DataStoreEnvironmentWhere something runs.
supportsSystem|Component|CapabilityCapabilityWhat business capability this serves.
satisfiesSystem|Component|InterfaceRequirementThe requirement something meets.
decided_bySystem|Component|Interface|DataStoreDecisionRecordThe recorded decision that shaped this.
supersedesDecisionRecord|Interface|Component|SystemDecisionRecord|Interface|Component|SystemThis replaced that. Use with the temporal fields, never by overwriting.
threatensRiskSystem|Component|Interface|DataStore|CapabilityWhat a risk applies to.
mitigated_byRiskDecisionRecord|Runbook|ComponentWhat reduces a risk.
operated_bySystem|ComponentRunbookThe runbook for something.
documented_inSystem|Component|Interface|DataStore|DecisionRecord|RequirementDocumentWhere this is written down.
implemented_byComponentRepositoryThe repository that holds this component's code.

The sample, drawn

The pack's sample graph, 18 nodes and 20 edges, in the explorer every project gets: open it full size.

Actions it ships

OTO lists them; the caller invokes.

Skills

/software-architecture:start Start or extend an Oto knowledge project in this domain: Software estate: systems, components, interfaces, data, environments, decisions and risks. The pack 'software-architecture' (release 1) embeds the ontology 'software-architecture' (release 5), which declares System, Component, Interface, DataStore, Environment, Team, Capability, Requirement and more. Use when someone wants a knowledge graph, a vocabulary or an interview for this domain.

Architecture Knowledge Base

Software estate: systems, components, interfaces, data, environments, decisions and risks.

This skill comes with the software-architecture pack. The ontology is inside the pack, so nothing is fetched.

1. Start a project from this pack.

   oto init --name "<project name>" --pack "${CLAUDE_PLUGIN_ROOT}" --project <root>

${CLAUDE_PLUGIN_ROOT} is this pack's directory; Claude Code fills it in. Outside Claude Code, with the pack on the machine (oto pack add software-architecture from the cynergis registry), oto init --pack software-architecture does the same. The project records the ontology's origin, so oto status says when a newer release exists and oto ontology diff shows what changed.

2. Run the ontology-interview skill to fit the vocabulary to the documents at hand.

3. Hand over to the build-knowledge-base skill for the documents, and to the query-knowledge skill for questions. The engine plugin oto comes with this pack: the kg_* tools and the generic skills are available once it is installed.

What the ontology declares

  • System: A named application or platform that a team owns and a user or another system consumes.
  • Component: A part of a system deployed or released as a unit: a service, a job, a library, a front end.
  • Interface: A contract others depend on: an API, an event topic, a file feed, a database view.
  • DataStore: A place data lives: a database, a bucket, a queue, a cache, a warehouse table.
  • Environment: A place components run: production, staging, a region, a tenant.
  • Team: The group accountable for something. Attach ownership to a team, not to a person.
  • Capability: A business capability the estate supports. This is what the business asks about.
  • Requirement: A stated need, functional or otherwise, that something must satisfy.
  • DecisionRecord: A recorded architecture decision: the choice, the alternatives, the reason, the consequences.
  • Risk: A known way this can hurt: a single point of failure, an end of support, a concentration.
  • Runbook: The documented way to operate or recover something.
  • Document: A source document in the corpus: a design, a review, a standard, a transcript.
  • Repository: Where a component's code lives: a source repository, recorded before it exists (intended) and observed once it does.

The actions it ships

Oto lists them; the caller invokes (the act skill):

  • action.check-repository on Repository: Reads the repository's metadata from GitHub and records that it exists, its URL and its default branch. Realises an intended repository; re-attests a current one.
  • action.create-repository on Repository: Creates the repository an intended Repository fact describes, under its owner, and records the result. Changes the world: a person confirms it by name.
  • action.probe-interface on Interface: Calls an interface's base URL with a GET and keeps the response as a source document, so what the interface actually answers can be read and curated.

The guide

Reading a software-architecture graph

What this graph is for

It answers the questions people ask about a software estate under pressure, from documents that were written to describe it at rest: what breaks if this changes, who owns it, why it is the way it is, what is fragile, and what the business loses when a part fails. Every answer cites the document that states it and the date it was true.

The questions it answers well

  • Change impact. "What depends on the payments interface?" follows consumes and exposes, and the rule consumer-depends-on-provider derives the dependency between components so it can be asked directly: oto query neighbors "<component>" depends_on.
  • Ownership. "Who do I call about the ledger?" follows owned_by to a Team. If the answer is a person, the graph is recording the wrong thing.
  • Reasons. "Why one ledger?" follows decided_by to a DecisionRecord and quotes its reason. A decision without a recorded document is flagged by decision-is-documented.
  • Fragility. "What threatens production?" follows threatens and mitigated_by from Risk. The rule risk-reaches-system lifts a risk to a component up to its system.
  • Business exposure. "What can customers not do if payments is down?" follows supports to Capability, the one class written in the business's words.

Where to start reading

Open the explorer (oto serve --http 8765) and read the System column first: each system is a unit of ownership. Then one system's components and the interfaces between them. Read DecisionRecord entries last: they explain what the rest shows. A dashed edge was derived by a rule; oto rules explain <rule> says why the rule exists and what it derived.

What can be done

The ontology ships three actions, listed by oto actions list and never invoked by Oto: a daily check that a repository exists (read-only; it realises an intended Repository and re-attests a current one), the creation of a repository an intended fact describes (it changes the world, so a person confirms it by name), and a weekly read of what an Interface answers at its URL. Record a run with oto actions record, and the response enters the graph through the gates with the run as its evidence. The act skill is the protocol.

Common mistakes

  • Recording a person as an owner. Use the team; people move.
  • Recording every server. This is not a configuration database; add Environment only where a question needs it, and point at the catalog that holds the rest.
  • Two components writing one store without a decision that says so. writes_to is separate from reads_from so this can be asked: oto query neighbors "<store>" writes_to.
  • Leaving validated_by empty on a rule for months. A rule nobody confirmed derives facts nobody asked for.

Views

None yet: the explorer and the reader every project has.

The guide

Reading a software-architecture graph

What this graph is for

It answers the questions people ask about a software estate under pressure, from documents that were written to describe it at rest: what breaks if this changes, who owns it, why it is the way it is, what is fragile, and what the business loses when a part fails. Every answer cites the document that states it and the date it was true.

The questions it answers well

  • Change impact. "What depends on the payments interface?" follows consumes and exposes, and the rule consumer-depends-on-provider derives the dependency between components so it can be asked directly: oto query neighbors "<component>" depends_on.
  • Ownership. "Who do I call about the ledger?" follows owned_by to a Team. If the answer is a person, the graph is recording the wrong thing.
  • Reasons. "Why one ledger?" follows decided_by to a DecisionRecord and quotes its reason. A decision without a recorded document is flagged by decision-is-documented.
  • Fragility. "What threatens production?" follows threatens and mitigated_by from Risk. The rule risk-reaches-system lifts a risk to a component up to its system.
  • Business exposure. "What can customers not do if payments is down?" follows supports to Capability, the one class written in the business's words.

Where to start reading

Open the explorer (oto serve --http 8765) and read the System column first: each system is a unit of ownership. Then one system's components and the interfaces between them. Read DecisionRecord entries last: they explain what the rest shows. A dashed edge was derived by a rule; oto rules explain <rule> says why the rule exists and what it derived.

What can be done

The ontology ships three actions, listed by oto actions list and never invoked by Oto: a daily check that a repository exists (read-only; it realises an intended Repository and re-attests a current one), the creation of a repository an intended fact describes (it changes the world, so a person confirms it by name), and a weekly read of what an Interface answers at its URL. Record a run with oto actions record, and the response enters the graph through the gates with the run as its evidence. The act skill is the protocol.

Common mistakes

  • Recording a person as an owner. Use the team; people move.
  • Recording every server. This is not a configuration database; add Environment only where a question needs it, and point at the catalog that holds the rest.
  • Two components writing one store without a decision that says so. writes_to is separate from reads_from so this can be asked: oto query neighbors "<store>" writes_to.
  • Leaving validated_by empty on a rule for months. A rule nobody confirmed derives facts nobody asked for.

Changelog