Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ apps/
commandboard-web PWA shell
packages/
cli logicsrc OpenSpec CLI
openontology OpenOntology reference engine (entities, claims, queries, change sets)
logicsrc-mcp @profullstack/logicsrc-mcp standards MCP server
sdk SDK contract types and helpers
tui terminal UI
Expand All @@ -27,6 +28,10 @@ plugins/
c0mpute work-in-progress compute jobs and worker pools plugin
docs/
specs, CLI conventions, permissions, and roadmap notes
examples/
openontology/ethereum-ecosystem fictional ecosystem map demonstrating OpenOntology
prd/
numbered OpenPRD proposals
scripts/
install.sh curl | sh installer
```
Expand All @@ -47,6 +52,33 @@ npm --workspace @profullstack/logicsrc-mcp run build
node packages/logicsrc-mcp/dist/index.js
```

## OpenOntology

[LogicSRC OpenOntology](docs/openontology.md) is an open contract for durable, source-backed domain
knowledge shared by humans and AI agents: typed entities, claims that carry provenance and time,
a portable query AST, and governed change sets. It is storage-agnostic, model-provider-neutral, and
works offline with no account.

```bash
npm --workspace @logicsrc/cli run dev -- ontology init my-ecosystem
npm --workspace @logicsrc/cli run dev -- ontology validate my-ecosystem --strict
npm --workspace @logicsrc/cli run dev -- ontology query run contributors --dir my-ecosystem
```

```txt
✓ 3 entity types
✓ 4 relationship types
✓ 8 entities
✓ 14 claims
✓ 2 sources
OpenOntology package is valid.
```

Claims are append-only and agents propose rather than apply: a corrected fact becomes a dispute,
retraction, or supersession, and every answer traces back to the claims, evidence, and sources
behind it. See also [governance](docs/openontology-governance.md) and
[interoperability](docs/openontology-interoperability.md).

## MCP

LogicSRC exposes a standards-focused MCP server as `@profullstack/logicsrc-mcp`.
Expand Down
285 changes: 285 additions & 0 deletions apps/logicsrc-web/src/app/openontology/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,285 @@
import Link from "next/link";
import type { ReactNode } from "react";
import type { Metadata } from "next";
import { SiteShell } from "@/components/site-shell";

export const metadata: Metadata = {
title: "OpenOntology · LogicSRC",
description:
"LogicSRC OpenOntology is an open contract for durable, source-backed domain knowledge shared by humans and AI agents: typed entities, claims with provenance and time, portable queries, and governed change sets.",
alternates: { canonical: "/openontology" },
};

const card = {
border: "1px solid #e3e6e0",
borderRadius: "0.6rem",
padding: "1rem 1.15rem",
background: "#fff",
} as const;

const mono = {
fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
fontSize: "0.85rem",
} as const;

const pre = {
...mono,
background: "#101418",
color: "#e8eef5",
padding: "1rem 1.1rem",
borderRadius: "0.6rem",
overflowX: "auto" as const,
lineHeight: 1.6,
margin: 0,
};

const NOUNS: Array<[string, string, string]> = [
["Type", "What kind of thing something is", "Person, Project, Codebase"],
["Entity", "A specific thing with a stable id", "eth:person:avery-lindqvist"],
["Claim", "A typed statement about an entity, or between two", "Avery —worksOn→ ZK Prover"],
["Source", "Where the claim came from", "a commit, a page, an API response"],
["Change set", "A reviewable proposal to add, correct, merge, or retract", "“Add Alice to ZK Prover”"],
];

const LAYERS: Array<[string, string]> = [
[
"Ontology schema",
"The types, properties, relationships, constraints, and saved queries that describe a domain. Fetchable on its own, with no data in it.",
],
[
"Knowledge graph",
"The populated entities, claims, sources, and evidence. Append-only: corrections add history rather than overwriting it.",
],
[
"Storage engine",
"Where those objects happen to live — SQLite, Turso/libSQL, Postgres, an RDF store. Swappable behind one adapter interface.",
],
[
"Vector search",
"Optional, rebuildable, derived data that improves discovery. Never authoritative, never the only representation of a fact.",
],
[
"Agent runtime",
"The thing that reads, queries, and proposes. It holds scopes, not privileges: it proposes; a human applies.",
],
];

export default function OpenOntologyPage(): ReactNode {
return (
<SiteShell active="OpenOntology">
<div className="band">
<div className="section-head">
<p className="eyebrow">LogicSRC standards surface</p>
<h2>OpenOntology</h2>
<p>
An open contract for durable, source-backed domain knowledge shared by humans and AI
agents. Define the things in a domain, connect them with typed claims, preserve where
each fact came from, and let agents query or propose changes through governed
interfaces.
</p>
</div>

<p style={{ color: "#41505d" }}>
OpenOntology is a <strong>standard</strong>, not a hosted graph product. The normative
contracts are JSON Schemas; <code style={mono}>@logicsrc/openontology</code> is a
reference implementation of them, not the definition. It is storage-agnostic,
model-provider-neutral, and works with no account, no API key, and no network.
</p>
<p style={{ color: "#5b6b7a", fontSize: "0.95rem" }}>
Status: <strong>0.1 Draft</strong>. Ontologies are decades-old work and OpenOntology did
not invent them — it is one open, agent-shaped contract among several, and it maps to
JSON-LD and PROV-O rather than replacing them.
</p>
</div>

<div className="band">
<div className="section-head">
<h2>Five nouns</h2>
<p>Learn these and you can read any package.</p>
</div>
<div style={{ display: "grid", gap: "0.75rem" }}>
{NOUNS.map(([noun, what, example]) => (
<div key={noun} style={card}>
<strong style={{ color: "#101418" }}>{noun}</strong>
<div style={{ color: "#41505d", margin: "0.2rem 0" }}>{what}</div>
<code style={{ ...mono, color: "#5b6b7a" }}>{example}</code>
</div>
))}
</div>
</div>

<div className="band">
<div className="section-head">
<h2>A map of an ecosystem</h2>
<p>
People, organizations, projects, codebases, and the research topics they serve —
connected by typed, queryable relationships instead of prose.
</p>
</div>
<pre style={pre}>{` Person ──worksAt──▶ Organization ──maintains──▶ Codebase
│ │ │
worksOn builds implements
│ │ │
▼ ▼ ▼
Project ──investigates──▶ ResearchTopic Protocol
funds
FundingProgram`}</pre>
<p style={{ color: "#41505d", marginTop: "1rem" }}>
Ask it a three-hop question — <em>which organizations maintain the codebases the
applications on this network depend on?</em> — and get back rows you can trace to
evidence.
</p>
</div>

<div className="band">
<div className="section-head">
<h2>Every claim carries its receipts</h2>
<p>Status, confidence, both clocks, and the sources it rests on.</p>
</div>
<pre style={pre}>{`openontology: "0.1"
kind: Claim
subject: "eth:person:avery-lindqvist"
predicate: worksOn
object:
entity: "eth:project:zk-prover"
status: asserted # asserted | proposed | disputed
# retracted | superseded | derived
confidence: 0.94 # metadata, never permission
validTime: # when it was true in the world
from: 2026-04-01T00:00:00Z
to: null
assertedAt: 2026-07-25T19:43:12Z # when we recorded it
assertedBy: "agent:research-mapper"
runId: "run_01J3EXAMPLE"
sources: ["eth:source:commit-a41f"]
evidence: ["eth:evidence:007"]`}</pre>
<p style={{ color: "#41505d", marginTop: "1rem" }}>
We say <strong>claim</strong>, not <em>fact</em>. A clean graph makes uncertain things
look definitive, so status, confidence, source count, valid time, and dispute history
stay visible everywhere — in query results, in the CLI, and in the UI.
</p>
</div>

<div className="band">
<div className="section-head">
<h2>Five things people conflate</h2>
<p>OpenOntology is the first two. The rest are implementation choices.</p>
</div>
<div style={{ display: "grid", gap: "0.75rem" }}>
{LAYERS.map(([name, detail]) => (
<div key={name} style={card}>
<strong style={{ color: "#101418" }}>{name}</strong>
<div style={{ color: "#41505d" }}>{detail}</div>
</div>
))}
</div>
</div>

<div className="band">
<div className="section-head">
<h2>Agents propose. Humans apply.</h2>
<p>The safety model in one line, and what enforces it.</p>
</div>
<ul style={{ color: "#41505d", lineHeight: 1.8, paddingLeft: "1.1rem" }}>
<li>Agent-created change sets default to <code style={mono}>proposed</code>.</li>
<li>
An agent holding <em>every</em> scope still cannot apply — the denial keys on actor
type, not on privileges.
</li>
<li>Confidence is metadata, never permission.</li>
<li>
<code style={mono}>--yolo</code> and unattended mode cannot bypass a required approval.
</li>
<li>
Source text is data: an instruction inside an imported document cannot widen scopes or
move tool boundaries.
</li>
<li>Merges, bulk retractions, and breaking migrations require explicit approval.</li>
<li>Model chain-of-thought is never stored; evidence and policy decisions are.</li>
</ul>
</div>

<div className="band">
<div className="section-head">
<h2>Five minutes, offline</h2>
<p>No login, no hosted database, no model key.</p>
</div>
<pre style={pre}>{`logicsrc ontology init my-ecosystem
logicsrc ontology validate my-ecosystem --strict
logicsrc ontology query run contributors --dir my-ecosystem
logicsrc ontology query explain contributors --dir my-ecosystem --row 0`}</pre>
<pre style={{ ...pre, marginTop: "1rem" }}>{` ✓ 3 entity types
✓ 4 relationship types
✓ 8 entities
✓ 14 claims
✓ 2 sources
✓ 1 constraints
OpenOntology package is valid.`}</pre>
</div>

<div className="band">
<div className="section-head">
<h2>Where everything lives</h2>
</div>
<ul style={{ color: "#41505d", lineHeight: 1.9, paddingLeft: "1.1rem" }}>
<li>
<Link href="/docs/openontology">Specification</Link> — the model, packages, claims,
queries, validation, CLI, SDK, conformance
</li>
<li>
<Link href="/docs/openontology-governance">Governance</Link> — review, approval,
scopes, merges, conflicts, rollback, audit, signatures
</li>
<li>
<Link href="/docs/openontology-interoperability">Interoperability</Link> — JSON-LD,
RDF, SHACL, PROV-O, external ids, compatibility matrix
</li>
<li>
<a
href="https://github.com/profullstack/logicsrc/tree/master/packages/schemas/schemas"
rel="noreferrer"
>
JSON Schemas
</a>{" "}
— 16 normative object contracts under{" "}
<code style={mono}>logicsrc-openontology-*.schema.json</code>
</li>
<li>
<a
href="https://github.com/profullstack/logicsrc/tree/master/packages/schemas/fixtures/openontology"
rel="noreferrer"
>
Conformance bundle
</a>{" "}
— valid and invalid fixtures a third party can run with no LogicSRC code
</li>
<li>
<a
href="https://github.com/profullstack/logicsrc/tree/master/examples/openontology/ethereum-ecosystem"
rel="noreferrer"
>
Ethereum ecosystem example
</a>{" "}
— 63 entities, 169 claims, 25 sources, all fictional
</li>
<li>
<a
href="https://github.com/profullstack/logicsrc/blob/master/prd/0001-add-logicsrc-openontology-spec.md"
rel="noreferrer"
>
OpenPRD 0001
</a>{" "}
— the proposal, its decisions, and its open questions
</li>
<li>
<a href="https://github.com/profullstack/logicsrc" rel="noreferrer">
Source on GitHub
</a>
</li>
</ul>
</div>
</SiteShell>
);
}
1 change: 1 addition & 0 deletions apps/logicsrc-web/src/app/sitemap.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ const STATIC_ROUTES: Array<{
}> = [
{ path: "/", changeFrequency: "weekly", priority: 1.0 },
{ path: "/docs", changeFrequency: "weekly", priority: 0.9 },
{ path: "/openontology", changeFrequency: "weekly", priority: 0.9 },
{ path: "/openspec", changeFrequency: "weekly", priority: 0.8 },
{ path: "/agent-swarm", changeFrequency: "weekly", priority: 0.8 },
{ path: "/agentbyte", changeFrequency: "weekly", priority: 0.8 },
Expand Down
1 change: 1 addition & 0 deletions apps/logicsrc-web/src/components/site-shell.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const NAV: Array<{ href: string; label: string; external?: boolean }> = [
{ href: "/agent-swarm", label: "Soon" },
{ href: "/agentbyte", label: "AgentByte" },
{ href: "/credential-sharing", label: "Credentials" },
{ href: "/openontology", label: "OpenOntology" },
{ href: "/#cli", label: "CLI" },
{ href: "/docs", label: "Docs" },
{ href: "/blog", label: "Blog" },
Expand Down
3 changes: 3 additions & 0 deletions apps/logicsrc-web/src/lib/docs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ const DOCS_DIR = resolve(process.cwd(), "../../docs");
// Curated, public-facing reference docs. Internal notes (roadmap, positioning,
// arcade) are intentionally excluded.
export const DOC_SLUGS = [
"openontology",
"openontology-governance",
"openontology-interoperability",
"openspec-comparison",
"data-model",
"cli",
Expand Down
Loading
Loading