Literate AI

Repository documentation

Component authoring and lock separation

component.json currently combines two different jobs: human intent and exact resolved identities. The result is trustworthy for machines but unnecessarily expensive for humans to maintain. This roadmap separates those jobs without weakening any current identity, review, or fail-closed boundary.

flowchart LR
    A["component.md<br/>small frontmatter + human intent"] --> L[litai lock]
    C[Project catalogs + policy] --> L
    L --> K["component.lock.json<br/>exact resolved graph"]
    A --> P[litai plan / generate]
    K --> P
    P --> E[Recipe + evidence identities]

Deliverable 1: classify every field

Produce a reviewed field matrix for Component, Flavor, workflow, routing, skill, acceptance, and repository-source references. Mark each field as authored intent, resolvable selector, resolved identity, or runtime evidence.

Acceptance criteria:

Deliverable 2: define the authoring manifest

Add a versioned Markdown-frontmatter authoring schema for component.md that keeps the Component readable and composable. Follow the same constrained-YAML rule as literate-markdown@1: reject unknown keys and parser-dependent YAML features, derive obvious IDs and paths, and keep descriptive prose in Markdown. Preserve explicit pins when the author intends them, but do not require a human to recalculate derived hashes after every ordinary documentation edit.

Acceptance criteria:

Deliverable 3: define component.lock.json

Add a canonical, Git-friendly lock schema containing exact Component and Flavor revisions, specification/skill/workflow/routing/acceptance identities, repository-source locks, identity-bound requirement-constraint satisfaction decisions, composition decisions, toolchain constraints, and the resolver/policy identity that chose them. The lock contains no product behavior that is absent from authored inputs.

Acceptance criteria:

Deliverable 4: implement litai lock

Add litai lock [COMPONENT|PROJECT], litai lock --check, and a structured diff mode. The update command resolves current catalogs and writes locks atomically. The check command is non-mutating and suitable for CI. No coding model is needed for deterministic identity resolution.

Acceptance criteria:

Deliverable 5: consume locks throughout the lifecycle

Make plan, generate, rebuild, publication, SBOM generation, and source promotion consume the exact current lock. Recipe and CycloneDX identities must bind the same resolved Component graph.

Acceptance criteria:

Deliverable 6: migration and compatibility exit

litai component migrate COMPONENT|PROJECT now provides the explicit non-destructive migration command and focused welded-manifest fixtures. Project mode preflights every Component and publishes the complete set under one project lock; an injected failure proves that it removes only exact documents created by that transaction and preserves every legacy byte. All 17 current sample Components have migrated authoring documents and pass the semantic migration recheck. Newly written and source-promoted projects use the split format immediately. Legacy authoring is deprecated in 0.2.0, 0.2.x is the final migration/equivalence window, and 0.3.0 removes the reader. Ordinary project operations already reject legacy-only Components with the exact litai component migrate COMPONENT remediation.

Acceptance criteria:

Deliverable 7: authoring ergonomics and proof

Update litai init, the top-level skill, JSON schemas, editor hints, examples, diagrams, and tests. Add one three-level Component fixture to prove that locks remain factored rather than becoming a monorepo-sized generated manifest.

The default authoring surface is one component.md, not a directory template full of peer serializations. That document contains both readable Component metadata and the observable behavioral specification. component.lock.json is generated separately; normalized JSON views are inspection output, not hand-maintained authority. Split prose only at a named domain/module boundary, retain a separate public-interface document only for an actual compositional contract, and keep repository harness metadata plus private acceptance oracles outside the Component directory.

Acceptance criteria:

Already-landed specification-node foundation

This roadmap no longer needs to invent the behavioral document shape. Schema v2 now includes strict specification-node-authoring, specification-node, and effective-specification-context contracts. The literate-markdown@1 provider derives node IDs and parents from spec.md folder structure, validates explicit local references, rejects cycles and unknown frontmatter, and supplies one canonical context graph to generation without copying ancestor prose. LOCK-200 must preserve those semantics while removing the remaining welded Component manifest.

Deliverables 1 through 4 and the transactional migration writer are operational: strict component.md parsing, selected lock and separate catalog-audit contracts, deterministic resolution, atomic update, non-mutating check/diff, and a round-trip-proven legacy projection that preserves component.json. Project planning and the simplified sample portfolio consume component.md; the external default rebuild driver and final compatibility-removal release remain the open Deliverable 5/cutover work. Legacy JSON is therefore migration input, not newly authored sample authority.

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