Literate AI

Repository documentation

ADR 0001: Extract a Software-Neutral Lifecycle Kernel

Context

OVA implemented Components, source-grounded generation, model groups/selectors, local caches, packaging/linking, publication, Settings integration, living samples, and a source-security plan while building an Omniverse application generator. Most of those concepts describe a general spec-led software lifecycle. Their current Python types and services also encode OVA policy, CodeGraph CLI behavior, Python build behavior, filesystem storage, and fixed model stages.

Copying or renaming the implementation would make literate-ai an OVA utility library. Rewriting without compatibility fixtures would discard the strongest invariants and make an eventual OVA rebase unsafe.

Decision

Build literate-ai as a software-neutral, hexagonal lifecycle kernel with immutable, versioned wire contracts. Domain and application packages depend only on ports. OpenSpec, Git/local sources, CodeGraph, model providers, builders, storage, and publishers are adapters. OVA becomes a downstream adapter and conformance consumer.

The public object model distinguishes logical Components, immutable revisions, exact source snapshots, knowledge/evidence, durable workflow runs, security decisions, immutable bundles, publication records, and scoped settings. Generated outputs return to the system as ordinary Component revisions.

Migration uses the two phases in ova-two-phase-rebase.md: framework extraction and shadow proof first; OVA cutover and duplicate retirement second.

Boundary rule

Core code and schemas must not contain:

OVA-specific behavior belongs in the OVA repository or compatibility/ova during the migration window. Generic adapters may live here if they satisfy neutral port contracts.

Consequences

Positive consequences:

Costs and risks:

Rejected alternatives

Rename and move OVA modules

Rejected because it preserves OVA foundation injection, eager indexing, fixed stages, mutable package projections, Python build semantics, and storage/UI coupling.

Keep the framework inside OVA

Rejected because dependency direction would remain wrong and other products would have to import application policy to use general lifecycle contracts.

Rewrite with no parity layer

Rejected because existing manifests, locks, caches, provenance, samples, and failure semantics are part of the behavior to preserve or explicitly migrate.

Use signatures as build authorization

Rejected because a signature proves source origin and integrity, not behavioral safety. Classification and short-lived build authorization remain separate mandatory decisions.

Validation

This decision is enforced by import/dependency tests, schema fixtures, neutral samples, OVA shadow comparison, exact identity mapping, security adversarial tests, true self-hosting, and the Phase 1/Phase 2 exit gates.

The reference implementation ecosystem and tooling isolation are decided separately in ADR 0002.

Read the Markdown sourceConference homePublished 1.3.0 · Patch 1.3.1 in progress · Development 1.4