Literate AI

Repository documentation

Framework score-improvement program

This program turns the assessment into an executable plan. It is deliberately most detailed around the lowest scores and highest-risk correctness gaps: maturity, brownfield/inverse support, end-to-end execution, portability, source fungibility, and enterprise safety.

The first milestone is not feature growth. It is making every authority claim truthful. In particular, no current qualification record may make generated source disposable until the source-free and lifecycle-backed qualification work in this plan lands.

Outcome and scoring contract

The external scorecard uses six one-to-five dimensions:

Dimension Baseline What earns a five
Specification authority (S) 4 immutable versioned contracts, separated authored intent and locks, and exact authority transitions
Runnable end to end (E) 3 a fresh project and a multi-Component project generate, build, test, link, run, repair, cache, and publish through one standard lifecycle
Trust and provenance (T) 4 audited input closure plus authenticated, resolvable evidence for every release claim
Brownfield and inverse (B) 2 independently measured, multi-language and multi-Component source-to-specification fidelity with honest uncertainty
Portability (P) 3 signed proof of the same selected application on macOS, Windows, and supported Linux targets
Operational maturity (M) 1 repeatable releases, current receipts, regression budgets, incident procedures, and sustained external-project evidence

Scores move only when a gate's evidence exists. Merging a schema, writing documentation, or passing a fake-provider unit test does not by itself raise a score.

Gate Required outcome Score after gate Total
G0 — assessed baseline Reviewed snapshot 4/3/4/2/3/1 17/30
G1 — truthful alpha Frozen wire contracts, blocked legacy authority transfer, honest CodeGraph state, and audited source-free promotion 5/3/5/2/3/2 20/30
G2 — usable alpha Standard lifecycle, lifecycle-backed qualification, runnable scaffold, and one authenticated golden application 5/4/5/3/4/3 24/30
G3 — composable beta Per-Component generation/build/cache, bounded repair, four-language inverse proof, and dependency-rich execution 5/5/5/4/4/4 27/30
G4 — enterprise candidate Signed platform matrix, production containment, complete evidence closure, and strong brownfield benchmark 5/5/5/5/5/4 29/30
G5 — mature Several releases and independent projects meet published reliability, cost, support, and recovery objectives 5/5/5/5/5/5 30/30

G5 is intentionally not obtainable by adding code. It requires longitudinal evidence.

Program rules

These rules apply to every task and agent lane:

  1. Truth before compatibility. Published contracts remain readable, but unsafe authority decisions are not grandfathered.
  2. One lifecycle. Samples, qualification, cache reacceptance, and ordinary projects use the same public application service.
  3. One Component, one derivation unit. Each Component owns its generation, source cache, build, tests, artifacts, SBOM, and evidence.
  4. Context is compositional, not transitive. A coding agent receives one Component's local authority plus the well-formed public contracts of its direct dependencies. It never receives an application's flattened transitive implementation context.
  5. Independent acceptance stays hidden. A failed verifier oracle never becomes a repair prompt.
  6. No claim outruns its observation boundary. SBOM, provenance, source exclusion, containment, and platform claims state exactly what was measured.
  7. No feature broadening before the golden path. New languages, publication transports, OVA features, and evidence record types wait unless a task below requires them.
  8. Contracts merge before consumers. One integration owner controls shared schema catalogs, public exports, CLI registration, and design traceability in each wave.

Critical path

flowchart TD
    F0["FND-001 Stop unsafe authority transfer"] --> A1["AUTH-100 Authority ladder"]
    F1["FND-002 Freeze schemas and versions"] --> A1
    F1 --> L1["LOCK-200 Authored intent and locks"]
    A1 --> P1["PROM-110 Source-free promotion"]
    L1 --> S1["SPEC-205 Readable layered specs"]
    S1 --> D1["DAG-210 Per-Component plans"]
    P1 --> Q1["QUAL-120 Lifecycle qualification"]
    D1 --> CTX["CTX-215 Bounded agent context"]
    CTX --> APP
    APP --> Q1
    APP --> GOLD["UX-270 Runnable golden path"]
    D1 --> BUILD["BUILD-220 Artifact graph"]
    BUILD --> APP
    I1["INV-130 Independent surfaces"] --> Q1
    I1 --> I2["INV-140 Evidence partitioning"]
    Q1 --> LANG["INV-160 Four-language proof"]
    I2 --> LANG
    GOLD --> OPS["OPS-300 Authenticated operations"]
    LANG --> BETA["G3 Composable beta"]
    OPS --> BETA
    BETA --> SEC["SEC-360 Containment and signed matrix"]
    SEC --> RC["G4 Enterprise candidate"]

Workstream A — release truth and immediate containment

This workstream is P0 because the framework's trust claims depend on immutable contracts and honest authority decisions.

FND-001 Stop legacy qualification from transferring authority — P0

Dependencies: none. Owner: qualification contracts agent.

Acceptance evidence:

Score effect: removes an unsafe claim; it does not raise a score by itself.

FND-002 Restore contract immutability and release identity — P0

Dependencies: none. Owner: wire-contract agent.

Acceptance evidence:

Score effect at G1: S 4→5 and M 1→2, together with the rest of this workstream.

FND-003 Characterize the migration baseline — P0

Dependencies: none. Owner: test-fixture agent.

Acceptance evidence: every current sample has content-addressed manifest and host-platform recipe observations. The service-stack Component composition is an explicitly representative graph observation, not a claim of repository-wide behavioral coverage. The immutable before-state is anchored to an exact Git revision, tree, capture protocol, and capture-tool identity. Cache, source/resolved SBOM, bundle, and receipt wires are captured in full with canonical identities and replay from the pinned Git tree through the exact byte-addressed capture program; the capture, runtime, invocation, complete wires, and enclosing characterization are separately identity-bound. Same-shape semantic mutations must change those observations. The bounded identity-impact model is backed by real Flavor-definition, Flavor-revision, TargetProfile, resolution-policy, lock, effective revision, and recipe mutations, and explicitly excludes identities outside the observed sample-planning/cache/SBOM/receipt scope. The actual before/after migration and atomic rollback gate belongs to LOCK-200, after that task defines the target authored-intent and lock contracts; Wave 0 must not invent an unreviewed after shape merely to satisfy a fixture.

FND-004 Separate operational CodeGraph state from frozen evidence — P0

Dependencies: none. Owner: source-intelligence agent.

Acceptance evidence:

Workstream B — earned fungibility and trustworthy inverse translation

This is the most detailed workstream because current brownfield support scores 2/5 and the existing authority-transfer defect is the highest correctness risk.

AUTH-100 Implement the Component authority ladder — P0

Dependencies: FND-002.

Define source-derived Component states separately from native spec-first Components:

  1. source-authoritative;
  2. spec-assisted;
  3. derived-source-retained; and
  4. regeneratively-qualified-fungible.

Acceptance evidence:

PROM-110 Make promotion demonstrably source-free — P0

Dependencies: FND-002. The allowlisted materializer, provenance store, audit, and migration core may proceed in parallel with AUTH-100; the authoritative acceptance transition and status integration wait for AUTH-100's transition API.

Define three disjoint closures:

Implementation tasks:

Acceptance evidence:

QUAL-120 Qualify through the normal lifecycle — P0

Dependencies: AUTH-100, PROM-110, and APP-240.

Acceptance evidence includes negative tests for fabricated totals, substituted case IDs, claimed surfaces, stale driver, skipped or empty tests, assertion-only tests, source cache hits, failed SBOM/index/build/test/verifier/parity phases, and reused workspaces. Only two complete clean runs may create regeneratively-qualified-fungible.

Current implementation status: the filesystem qualification adapter allocates a fresh outer root for each of two Standard runs and composes run-private generated-source, accepted-source, CAS, object, checkpoint, CodeGraph, and per-Component workspace roots. It forces cache bypass, consumes only the typed StandardProjectLifecycleResult and its project receipt, rechecks the pinned driver around each run, derives cases and totals from typed evidence, applies a verifier-owned case/surface map, and invokes baseline parity only after generation. The persisted QualificationLifecycleResult is parsed again at the promotion boundary; legacy command-count evidence remains fail-closed and cannot authorize fungibility.

INV-130 Discover behavioral surfaces independently — P1

Dependencies: FND-002; integrates with QUAL-120.

Current implementation status: a strict versioned inventory and item contract now owns stable detector-derived surface IDs, exact evidence, requirement/disposition state, translator mappings, and separately reviewed exclusions. The existing deterministic CodeGraph evidence collection is projected into this inventory before any inverse model call; well-known npm, Python, Cargo, and Bzlmod manifests contribute conservative entrypoint/export/Component/dependency surfaces. After translation, both exact evidence and an interface-compatible skill facet are required to reconcile observations without changing surface identity, and a required unmapped surface blocks the derivation. Collector and translator-set identities are distinct and enforced. The inventory is retained in current semantic result bundles and re-derived during acceptance, so an edited, missing, or journal-inconsistent record fails. The remaining unchecked work is ordinary-path verifier-surface collection, more complete Component-boundary detection, and an operator-facing reviewed-exclusion input path rather than merely its application contract. Model-only facet/evidence combinations are retained as translator-owned advisory proposals, and the provider-neutral merge accepts independently required verifier surfaces without allowing translator deletion; the ordinary verifier contract still needs to supply that input.

Acceptance evidence: deliberate omission of a public error branch cannot produce 100% coverage; traversal order is irrelevant; empty or unsupported inventories cannot qualify.

INV-140 Partition evidence without silent truncation — P1

Dependencies: INV-130.

Acceptance evidence covers first-file-over-budget, exact-boundary, missing, duplicate, tampered, reordered, and sensitive-exclusion cases. included_paths may never name content the model did not receive.

The current v1 EvidencePartitionManifest projects every retained source-inventory path before model egress and refuses required safe paths with no admitted evidence. Bundle v4 persists the strict manifest, complete source inventory, provider identity, byte counts, evidence IDs, and canonical ordinals. Acceptance reparses both records and reconstructs the manifest from the exact persisted intelligence, so an edited or substituted manifest fails closed. Duplicate source bytes do not excuse missing path-specific evidence. A separate content-addressed ModelEvidenceBatchPlan greedily partitions each language in canonical path/evidence order under an operator-visible byte ceiling (262,144 bytes by default). Oversized individual evidence blocks; every admitted evidence ID occurs in one batch; v2 journals bind ordinal, count, and IDs; and v4 translation acceptance reconstructs the plan and deterministically merges all observations and Component graph fragments. The remaining work is qualification-level budget coverage, more boundary-size adversarial cases, and an independent qualification-time reopening of the budget evidence. Accepted sets and promoted projects already retain the exact provider evidence and every raw partition prompt/response under the content-addressed provenance/source-promotion/<digest>/source-translation.json; that subtree is evidence custody and is never part of Component intent authority.

INV-150 Recover real Component semantics — P1

Dependencies: INV-130.

Acceptance evidence: library, CLI, and service fixtures retain distinct semantics; a multi-node graph fails rather than inventing a missing contract.

INV-160 Four-language bidirectional qualification — P1

Dependencies: QUAL-120, INV-130, INV-140, INV-150, and UX-270.

For Python, C++, Rust, and JavaScript on the host platform:

Replace the 13-of-16 keyword heuristic with a normalized requirement graph covering inputs, outputs, invariants, normalization, aggregation, ordering, tie-breaking, errors, and invalid inputs. Require all reference behaviors. Ordinary CI uses deterministic adapters; nightly and release CI use authenticated agents and fail, rather than skip, when a declared credential or toolchain is unavailable.

Score effect at G3: B 2→4. B reaches 5 only after the benchmark corpus demonstrates strong precision/recall on independent brownfield projects.

Workstream C — executable Components and the standard lifecycle

This workstream addresses the 3/5 end-to-end score and the current gap between the Component design and one flattened generation tree.

Why flattening is a P0 architectural failure

Flattening a Component graph into one generation recipe is not merely inefficient prompt assembly. It destroys the main economic and cognitive boundary of the framework:

The target boundary is therefore measurable. For Component C, generation context is:

context(C) = framework envelope
           + local authority(C)
           + selected target/Flavor/skill/workflow/routing inputs(C)
           + public interface contracts(direct generation dependencies of C)

It is independent of unrelated siblings, dependency-private specifications and source, and private descendants below a direct dependency. A transitive interface is visible only when a direct dependency deliberately re-exports it as part of its own public contract. Total project work may grow with the number of Components that genuinely need generation; the context and reasoning problem for any one Component must not grow with the private transitive graph.

COMP-190 Decide executable-Component semantics — P0

Dependencies: FND-002.

LOCK-200 Separate authored intent and exact resolution — P0

Dependencies: COMP-190, FND-002, FND-003.

Implement the detailed Component authoring and lock separation roadmap:

Current hardening: cache-hit selection and post-acceptance source-cache publication now reject every entry whose accepted derivation names a Component lock outside the exact outer-owned rebuild lock set. The lifecycle-binding item remains open until typed artifact publication and the ordinary Standard runtime consume the same lock authority. The typed bridge now retains the Standard lifecycle's typed build plan, derives its artifact graph from accepted exports, and creates a ReleaseArtifactSet without accepting a caller-supplied lock, root, target, workspace, or evidence identity. Explicit package choices come from a pre-package StandardReleaseDeclaration, not from the package result being verified. The release binds the accepted root source tree record, every referenced source-file blob, compiled export bytes, and a canonical compact index of every project/node lifecycle evidence identity. Publication independently verifies the typed lock and derives its revision, target, package roots, complete source closure, and compact provenance manifest from that release. This is not yet authenticated evidence storage. The item remains open until the evidence-store milestone supplies signed resolvable locators. The provider-neutral StandardProjectReleaseService now invokes packaging, performs exact CAS ingestion, authorizes and publishes, validates the transfer receipt, and returns a typed aggregate release receipt. FilesystemStandardProjectRuntime.execute_and_publish exposes that as an explicit caller-authorized phase while preserving lifecycle-only execute; its typed request binds the exact lock, declarations, complete source closure, evidence, policy, destination service, actor, and reason. Release declarations and aggregate receipts have strict versioned wire contracts and public v2 schemas. A fresh-CAS regression imports a published closure and reconstructs every generated source path and byte. Source-to-specification promotion now writes canonical component.md directly and never manufactures a welded component.json; authority status and legacy qualification revalidate the exact current lock instead of invoking the legacy composer. Legacy-only project authoring fails with an actionable migration diagnostic. The exit is fixed: deprecated in 0.2.0, final migration/equivalence series 0.2.x, removed in 0.3.0. The now-unreachable legacy generation composer and dedicated migration fixtures remain until the scheduled 0.3.0 removal; they are not ordinary project or generation fallbacks.

Acceptance evidence: a small manifest fits on one screen; two locks are byte-identical; stale or forged locks fail before model egress; lock diffs explain selection; every sample migrates without a semantic graph change; and rollback leaves no partial lock or authored-definition state. Changing an unselected Flavor or its skill changes the catalog-audit identity only; selected locks and recipes on every unaffected axis remain byte-identical.

SPEC-205 Make layered specifications readable and bounded — P0

Dependencies: FND-002; Component-authoring integration depends on LOCK-200.

Acceptance evidence: every example frontmatter document fits comfortably at the top of one Markdown file; derived IDs eliminate synchronized path metadata; context projection is byte-stable under catalog traversal reordering; invalid graphs fail before model egress; shared skill prose occurs once; and adding private descendants or unrelated VFI features changes neither a fixed Component's context bytes nor identity. The canonical starter remains fully lockable, generatable, buildable, and independently testable after deleting every redundant authored projection, and a fork begins with component.md rather than a seven-file directory ritual.

FMT-207 Finish the human-authoring and machine-record format split — P0

Dependencies: LOCK-200, SPEC-205.

Before 0.1, make the format boundary deliberate and remove pre-release accidents from the public taxonomy:

Acceptance evidence: a new user authors only Markdown to define a Component and its generation policy; every machine record has a versioned schema and canonical identity; the same semantic field has exactly one authority; and deleting all derived JSON leaves enough authored material to reproduce it byte-for-byte.

DAG-210 Plan generation per Component — P0

Dependencies: COMP-190, LOCK-200, SPEC-205.

Acceptance evidence: root-only, leaf-internal, and exported-interface changes invalidate exactly the expected nodes; diamonds deduplicate their leaf; deep prompts stay bounded; cycles and stage/Flavor conflicts fail before generation.

CTX-215 Enforce bounded coding-agent context and complexity budgets — P0

Dependencies: COMP-190, DAG-210.

Required graph-scaling tests:

  1. Adding or changing an unrelated sibling leaves a fixed node's context bytes and identity unchanged.
  2. Changing a leaf's private source/specification while preserving its public interface leaves every consumer context and source key unchanged.
  3. Changing an exported interface changes the direct consumer; it propagates further only through a deliberate public re-export or affected local behavior.
  4. Extending a chain beneath a direct dependency with private nodes does not enlarge the consumer prompt.
  5. Increasing direct fan-in grows context only by the selected public-interface bytes; exceeding policy fails before invoking a coding agent.
  6. Diamond, chain, and wide-fanout fixtures prove zero private-transitive leakage and deterministic manifests under catalog reordering.

Acceptance evidence reports, per node, local-authority bytes, direct-interface bytes, framework/skill overhead, estimated and actual tokens, attempt count, elapsed time, and cost where available. For a fixed node with fixed local authority and direct interfaces, private graph depth and width must have zero effect on context identity or size.

BUILD-220 Define assets, artifacts, and linking — P0

Dependencies: DAG-210.

Current implementation status: typed Standard command authority now separates the build-system resolver/toolchain, language compiler/runtime, and exact launcher for each phase without an inferred single-tool fallback. The projector reads exact-singleton standard-command-profile contributions only from the locked language, platform, and optional build-system Flavors. Those profiles determine source/test entrypoints, artifact shape, native strategy, runtime mode, toolchain constraints, and the single //:litai_artifact Bazel target. It discovers the selected host tools, observes their recursive dependency graph, rechecks the lock and toolchain closure, and emits shell-free build/test/execute commands whose artifacts implement --litai-test and --litai-smoke. Real macOS conformance compiles and runs Python, JavaScript, Rust, and C++ through those projected commands. Installed-project smoke proves the Bazel profile is packaged and copied by litai init. StandardBazelLifecyclePorts binds one exact local Bazel target and output, lets Bazel produce those bytes directly in isolated custody, and rejects output escapes or links. Ordinary sample wiring still selects the compatibility decorator. The ordinary hello-component sample now routes both its Python and C++ variants exclusively through the public Standard runtime. The dependency-bearing service-stack Python variant now likewise uses its existing three-node Standard service as its ordinary execution, including on the authenticated live path, rather than running a legacy execution plus a duplicate Standard adoption proof. Its C++ variant and other ordinary samples still retain legacy routes, so the remaining unchecked item is intentionally not closed. The Standard three-Component service-stack now declares an exact build-system slot and therefore resolves the project's +bazel preference normally. Its ordinary conformance handler routes that selection through the real executor: Bazel produces one declared deterministic bytecode archive per Component, generated-source custody remains unmodified, all three archives are executed and tested, and a second run proves three cache hits with no rebuild misses. This closes the executor and one ordinary sample proof, not the still-open default CLI and remaining-sample routing migration.

Acceptance evidence: binary bytes round-trip on three OS families; a model cannot overwrite locked assets; wrong producer/ABI/role/target fails before launch; the root artifact traces to every child; Bazel avoids unchanged actions.

APP-230 Extract public application services — P0

Dependencies: DAG-210, LOCK-200.

Current implementation status: locked litai plan and source-only litai generate delegate through the public Standard application services. Plan output carries the exact typed Component execution plan; generation output carries canonical per-Component workspace custody and full source results. Filesystem project/catalog validation and authority-review calculation now live behind a public adapter and pure application records; CLI commands only translate their stable failures into presentation envelopes. Canonical project initialization, starter-catalog creation, and explicit documentation authority-review recording likewise live behind a public filesystem adapter; the CLI retains only its stable version-three presentation projection. The locked generation CLI is presentation-only and architecture-tested. External lifecycle-driver discovery, implementation attestation, safe environment construction, argv expansion, drift checks, and bounded invocation now also live in a public adapter. Locked generation preparation, execution-plan compilation, authority review, and repeated input-drift checks now compose through one public filesystem application adapter. The CLI no longer contains its unreachable unlocked-generation fallback or duplicate Flavor, toolchain, role-entrypoint, and SBOM policy implementations. The Standard driver composition and ordinary CLI route are implemented, although the remaining sample and qualification migration keeps the presentation-only boundary from being complete repository-wide. A public provider-neutral lifecycle assembly function and an explicit component-scoped filesystem composition root now exist without CLI-private imports. The v2 project contract can bind either the byte-compatible external driver or a Standard framework-distribution/policy pair. The CLI selects that Standard binding when declared, and its filesystem composition root now consumes provider-neutral shell-free command contracts through exact phase-local tool bindings and distinct build-system resolver/toolchain and language compiler/runtime identities. Its readiness report still blocks incomplete command coverage, stale tool bindings, unverified toolchain closure, and unconfigured production CodeGraph or durable cache ports. Strict post-source evidence contracts now define the build, generated-test, execution, and Component-acceptance shapes. The real local and Bazel ports construct that complete chain on fresh runs from revalidated source-suite and source-BOM custody, an exact post-build CycloneDX transition, every-and-only attributable generated case results, artifact-bound execution observations, and composed acceptance. Durable Standard cache publication now retains the complete typed source, BOM, generated-test, build, execution, acceptance, and provenance closure. A newly assembled runtime can resolve the exact derivation key, materialize the tree into its newly allocated workspace, rebind current workspace custody, and then re-index, re-authorize, build/test/execute, and re-accept it without invoking generation or republishing the historical hit. Durable process-restart stage checkpoints now append typed pass/failure evidence and retry lineage while retaining source bytes in a CAS. A new runtime restores only source custody, then deliberately repeats current CodeGraph indexing, authorization, build, generated tests, execution, and acceptance; historical checkpoint evidence never impersonates current authority. A separately isolated verifier remains open. Generated-test, resolved-SBOM, execution, Component-acceptance, lifecycle-membership, and aggregate project-receipt projection are complete typed outputs of every successful Standard run. Compiler/runtime transitive closure is attested by the locked command projector.

Acceptance evidence: litai plan and generate delegate to public services, and neither tests nor samples import literate_ai.cli internals.

APP-240 Implement the topological standard lifecycle — P0

Dependencies: APP-230, DAG-210, CTX-215, BUILD-220.

Implement one reusable StandardProjectLifecycleService that:

  1. validates the project and target lock;
  2. plans the Component action DAG;
  3. resolves or generates and indexes each node tree;
  4. validates, classifies, and authorizes each node;
  5. builds topological layers from exact dependency artifacts;
  6. links/packages the root;
  7. runs node and integration generated tests;
  8. executes the root and runs independent acceptance;
  9. admits accepted node workspaces; and
  10. emits aggregate evidence and a provisional receipt.

Current implementation status:

The root-integration boundary now realizes an exact multi-Component artifact graph, materializes an immutable root package, runs package-owned integration tests, executes the packaged root, and compares canonical output against an independently injected verifier oracle whose arguments and expected result are unavailable during generation. The qualification workflow uses this same Standard composition. Remaining sample migration—not qualification—is what keeps the final checklist item open.

Parallelism is bounded; output order is canonical. Failure cancels dependents and leaves accepted siblings unpublished. Resume must revalidate every saved identity.

Acceptance evidence: the same service runs ordinary projects, samples, and qualification; a failing node leaves unrelated independent node evidence visible to the caller but not reusable from the accepted cache; no node builds before its inputs are accepted; interruption at each stage is safe.

CACHE-250 Make cache membership per Component — P0

Dependencies: APP-240.

Acceptance evidence covers corruption, ambiguity, target mismatch, leaf-hit/root-miss, forced bypass, and omitted/extra membership.

REPAIR-260 Add bounded replacement attempts — P0

Dependencies: APP-240.

The Standard lifecycle now implements typed CandidateAttempt, CandidateRepairRequest, and CandidateAttemptChain contracts with a filesystem repair adapter. Each replacement has a fresh workspace, retains the original recipe, binds its exact predecessor chain, and must complete the lifecycle before accepted-source admission. The production adapter retries only attributable build/test failures with the closed codes builder.generated-source-rejected, dependencies.import-bom-mismatch, and generated-test.failed. Its feedback uses bounded, sanitized facts rather than raw compiler output or verifier-oracle data. This is implemented support, not evidence of live provider or all-platform qualification, nor general repair of arbitrary compiler failures.

The following sample-specific pilot remains a distinct, narrower implementation. The conformance driver can replace a closed static Bzlmod source-validation rejection, an exact terminal generated-test behavior mismatch, a typed application/backend nonzero exit during generated implementation tests, or a terminal C++ generated-source rejection up to twice after the initial candidate, with fresh roots, sanitized typed rejection feedback in every subsequent generation request, category-specific complete identity bindings, no rejected-tree admission, and compact versioned success/exhaustion evidence. The validation category requires an exact failed validate event, a matching DependencyObservationError, generated tree/source-bundle/suite bindings, and no admitted lifecycle result. Its exact closed set is dependencies.bzlmod-authority-unsupported, dependencies.bzlmod-dependency-duplicate, dependencies.bzlmod-generated-lock-forbidden, dependencies.bzlmod-literal-invalid, dependencies.bzlmod-module-ambiguous, dependencies.bzlmod-module-invalid, dependencies.bzlmod-module-location-invalid, dependencies.bzlmod-module-name-invalid, dependencies.bzlmod-source-composition-invalid, dependencies.bzlmod-source-intent-invalid, and dependencies.bzlmod-workspace-unsupported. Resolver, dependency-evidence, unknown-code, toolchain, framework, and already-admitted failures remain terminal. The execution category requires host_execution.nonzero_exit, an application/backend role, a nonzero integer return code, and stdout/stderr digests; verifier failures, timeouts, launch/authorization, invalid output, and missing process evidence remain terminal. The build category requires completed validate/classify/authorize stages, no build result or downstream step, and an event-matching builder.cpp_generated_source_rejected BuildError; that code is emitted only when the candidate compile/link fails but a same-pinned-toolchain compile/link canary succeeds. A failed canary remains terminal builder.cpp_compile_failed. Python, Rust, JavaScript, generic native, Bazel build/resolve/analyze, toolchain, authorization, and all other dependency failures also remain terminal. These pilot-specific categories do not broaden the Standard adapter's retry allowlist. The checked implementation below refers to the reusable Standard contracts and lifecycle, not to the pilot alone.

Default to one initial attempt and at most two repairs. Compiler/linker and generated-test diagnostics may trigger repair; authentication, missing tools, policy denial, dependency trust, verifier-oracle failure, publication, and deployment may not.

Acceptance evidence: secrets, absolute paths, and hidden-oracle facts never enter repair prompts; limit exhaustion mutates no accepted state; attempt N+1 cannot exist without the exact failed N.

LEARN-265 Close the authority learning loop — P0

Dependencies: REPAIR-260.

Retry evidence currently improves only a bounded attempt chain. It does not make a reviewed lesson durable for later derivations. Implement the protocol in the authority learning loop:

Acceptance evidence: after an admitted lesson, a clean derivation with no prior candidate or journal receives the updated pinned authority and avoids the original defect; rejected or mis-scoped proposals leave Git authority, locks, caches, and receipts unchanged.

UX-270 Ship a runnable initialized project — P0

Remaining fanout acceptance is owned by UX-270.

Dependencies: APP-240, CACHE-250.

Required fresh-project proof:

litai init demo
cd demo
litai lock --check
litai plan components/app
litai rebuild components/app --allow-host-execution --update-receipt

This path must produce a runnable artifact and current receipt without custom driver code or hand-selected temporary directories, including on Windows without a POSIX shell.

Dependency-ordered delivery sequence (do not enable the default driver early):

  1. Define and resolve a versioned Standard lifecycle policy plus the exact installed framework distribution; reject unknown or drifting bindings before workspace allocation.
  2. Project locked Component and selected-Flavor authority into complete phase commands, Bazel/native targets, provider bindings, and an observed toolchain-closure record.
  3. Require strict source-index, build, resolved-SBOM, per-case generated-test, execution, independent acceptance, link/package, and root-integration evidence. A passing suite process alone does not prove that every declared generated case ran.
  4. Compose production CodeGraph custody, CAS materialization, accepted Standard cache publication, current re-index/re-authorization, and identity-checked cross-process resume checkpoints.
  5. Project the complete Standard result into the existing project-receipt policy and finalization boundary without inventing an external command for the in-process path.
  6. Expose one filesystem Standard rebuild adapter and prove it directly before routing the CLI to it.
  7. Only then make initialization install the Standard binding, policy, cache, receipt root, portable starter Component, selected Flavors/skills, and initial lock; --empty keeps infrastructure while omitting the starter and lock.
  8. Route the ordinary CLI through that adapter, preserving explicit host-execution authority, secure external runtime allocation, cleanup/retention controls, stable JSON, and atomic receipt updates.
  9. Run the five-command proof from an installed wheel, execute the returned artifact, repeat for a cache hit, and fan it out across macOS, Linux, and Windows.

UX-275 Make initialized projects safely upgradable — P0

Dependencies: UX-270.

Current milestone: the top-level litai update command implements a deterministic, read-only three-way plan over the recorded baseline, local files, and current installed static templates. It records exact old/new origin provenance, rejects repository substitution, classifies upstream-only/local-only/conflicting and added files, and preserves dynamic initialized outputs. It truthfully reports that apply, upstream removal inference, semantic migration, checkpoint replacement, and lifecycle gates are not implemented yet.

Acceptance evidence: initialize from two distinct repository origins, modify both framework-owned and project-owned files, advance both upstreams, and prove deterministic three-way updates preserve local intent on macOS, Linux, and Windows. Offline planning from the recorded checkpoint must explain what cannot be fetched without mutating the project.

TUTORIAL-280 Make every tutorial a complete LitAI project — P1

Dependencies: completion of the first implementation milestone backlog, UX-270, and the stable portion of UX-275 needed to keep tutorial scaffolds current.

Acceptance evidence: copy any tutorial directory outside this repository, install litai, run its documented validation and rebuild commands, and obtain the documented runnable output without relying on repository-relative implementation source.

Dependency step 1 is implemented. The versioned Standard policy is a packaged, schema-validated authority over phase order and receipt evidence. The binding resolver inventories the complete logical wheel payload without host paths, rejects editable or ambiguous installations, projects the existing typed lifecycle trust binding, and rechecks distribution and policy bytes before any specification or runtime path is allocated. Wheel conformance builds from a clean Git-visible projection, compares two clean installations, resolves a pin created from the first in the second, and proves that changing one installed policy byte trips the drift guard. The ordinary Standard runtime remains intentionally unavailable until steps 2 through 6 are complete.

Dependency step 2 is implemented. A versioned Standard toolchain-closure record binds the exact execution plan, per-node generation key and selected-Flavor identity, complete phase-command contract, optional Bazel target, provider bindings, every build/compiler/runtime/launcher toolchain identity, and one content-identified recursive host-dependency graph. The filesystem composition root consumes only that coherent projection; the loose command-input compatibility seam has been removed, rechecks every tool guard and graph byte projection, and selects the Bazel-native port when targets are present. The policy-backed projector derives exact shell-free commands, tool bindings, and optional Bazel targets from locked Component and Flavor authority; real macOS conformance compiles and runs Python, JavaScript, Rust, and C++ through those commands.

Dependency step 4 now has production CodeGraph custody and both recovery paths. The three-Component invoice application publishes full Standard entries on a clean Bazel run; a separately assembled runtime restores all three source trees, performs fresh final-path CodeGraph indexing and current authorization, hits all three Bazel artifacts, reruns generated tests and executables, and issues new acceptance without generation or cache republishing. The distinct pre-acceptance checkpoint path persists each stage and failure with retry lineage; a second independently assembled invoice runtime restores all source with zero generator calls, replays CodeGraph and every trust gate, and hits all three Bazel artifacts.

Dependency steps 5 through 8 now have a real installed-wheel proof on macOS. A clean 0.2.0 wheel initialized the portable starter with the exact Standard distribution and policy binding, produced a current initial lock, planned the selected Bazel/Python/macOS closure, allocated and optionally retained an external runtime, generated source through Codex, built //:litai_artifact with Bazel 9.2.0, ran all six generated cases plus the smoke execution, committed a current receipt, and returned the exact executed command. The exported artifact produced the deterministic ordinary result {"greeting":"Hello, Literate AI!","name":"Literate AI"}. A second rebuild reused the accepted source, reported one build-cache hit and zero misses, reran tests and execution, and committed another current receipt without invoking the coding agent. A subsequent installed-wheel qualification forced the explicit rules_python@2.2.0 override, retained the six-file Bzlmod evidence closure, projected the exact selected and transitive modules into CycloneDX, built and ran the known-output artifact, and proved a warm source reuse with one build-cache hit. Its interactive terminal projection showed the Component DAG, cache, repair, tests, artifact, shell-escaped execution command, working directory, and current receipt; noninteractive and --json modes retained the complete stable envelope. Step 9 remains open until this installed-wheel proof passes the private macOS/Linux/Windows fanout.

SAMPLE-280 Replace sample orchestration with a real diamond app — P0

Dependencies: UX-270, BUILD-220.

Acceptance evidence: each node owns its source and artifact; the runnable root links real children; samples invoke the public standard lifecycle and no private CLI helpers.

SAMPLE-285 Expand the reusable sample portfolio — P1

Dependencies: the catalog curation is independent; new stateful applications should use the public lifecycle from SAMPLE-280 rather than add more private runner behavior.

Acceptance evidence: each new application has a recognizable adaptation path, bounded portable dependencies, generated current-state tests, independent known outputs, and Component boundaries that keep private child context out of the root prompt.

Workstream D — operational proof, dependencies, and enterprise boundaries

This workstream raises portability and maturity only after the central lifecycle is real.

OPS-300 Add authenticated evidence storage and verification — P0

Dependencies: FND-002; contracts can develop in parallel with the lifecycle.

Acceptance evidence rejects missing/substituted blobs, wrong media/subject/repository/ workflow/platform/revision, untrusted/revoked signers, replay, partial closure, and mutable locator conflicts. Local unsigned mode must say it is unauthenticated.

OPS-310 Establish trusted CI, receipt promotion, and release — P0

Implementation is owned by OPS-310.

Dependencies: FND-004, OPS-300, UX-270.

Create four trust-separated workflows:

Authentication failure is a failed named cell with actionable login/token guidance, not a skip and never raw secret-bearing output.

OPS-320 Record durable, privacy-aware derivation journals — P1

Dependencies: OPS-300.

Acceptance evidence uses secret canaries and proves every forward, inverse, repair, and repository-planning model call appears in a complete journal.

DEP-330 Prove real repository and package dependencies — P1

Dependencies: APP-240, BUILD-220, OPS-300, SBOM-340, SEC-360.

Acceptance evidence: cold acquire/index/plan/build/link/test/run succeeds; a second run works offline; a moved branch creates a new lock; build scripts cannot mutate inputs or use undeclared network; all managed/package/repository nodes reach the receipt closure.

SBOM-340 State dependency completeness honestly — P1

Dependencies: FND-002; required before DEP-330 completes.

Acceptance evidence covers Python extras/markers, npm optional/peer dependencies, Cargo features/build dependencies, platform dynamic loading, unsupported ecosystems, and omitted known dependencies. Unknown passes only when policy explicitly permits it.

SEC-360 Establish production containment — P0 design, P1 delivery

Dependencies: architecture can start immediately; implementation uses APP-240 and OPS-300.

ADR 0041 was accepted on 2026-09-12. Its schema foundation is implemented: the four existing non-authorizing records are registered in the current catalog and exposed through the public security API. Full integration qualification and the APP-240/OPS-300 authorization/evidence bindings remain open; this does not satisfy any backend or enterprise acceptance below.

Acceptance evidence: malicious fixtures cannot read host canaries, escape outputs, use network, retain children, or exhaust resources; unsupported containment fails closed; an independent security review is required for the enterprise profile.

PORT-370 Produce a signed cross-platform matrix — P1

Dependencies: OPS-300, SAMPLE-280, and target containment policy.

Acceptance evidence rejects a forged pass, swapped report, wrong archive/Flavor/worker, missing sample/role, or duplicate target. The receipt resolves all underlying evidence.

TEST-380 Add property, fuzz, and mutation proof — P1

Dependencies: contracts as they stabilize; qualification coverage requires QUAL-120.

BENCH-390 Publish a versioned benchmark and score ledger — P1/P2

Dependencies: QUAL-120, UX-270, OPS-300, TEST-380.

G4 requires independent brownfield projects to meet a published inverse precision/recall threshold. G5 additionally requires multiple release intervals of stable results.

Workstream E — scope control, documentation, and release proof

MOD-400 Decompose by existing boundaries — P1

Dependencies: APP-230; complete after SAMPLE-280.

The exit metric is ownership and dependency direction, not a cosmetic file count. New scope remains frozen until UX-270 and SAMPLE-280 pass.

LIVE-405 Investigate an optional BEAM/ERTS live-development layer — P2

Dependencies: provider-neutral lifecycle contracts from MOD-400; the investigation must not block or weaken the existing C++, Python, JavaScript, or Rust paths.

The implementation gate is evidence, not enthusiasm: the prototype proceeds only if it shortens the spec-feedback loop without creating a second orchestration core or making BEAM semantics part of the neutral domain. The terminal investigation decision is an explicit adopt, defer, or reject record; a useful experiment does not silently add BEAM or Mix to the mandatory host toolchain.

DOC-410 Make the golden path and guarantees obvious — P1

Dependencies: documentation follows the implemented contracts in each wave; final pass after UX-270 and SAMPLE-280.

REL-420 Final release proof — terminal gate

Dependencies: every P0 and milestone-required P1 task.

A release candidate passes only when:

Parallel agent execution

The program assumes four active lanes: three implementation agents and one integration owner. A lane owns a coherent boundary, not a grab bag of files.

Wave Lane A Lane B Lane C Integration owner and merge gate
0 — containment FND-001 FND-002 FND-003, FND-004 freeze releases; merge schema truth before all consumers
1 — contracts AUTH-100, PROM-110 COMP-190, LOCK-200, SPEC-205 OPS-300 contracts, SEC-360 threat model owns schema catalog, exports, CLI registration, traceability
2 — cores INV-130, INV-140, INV-150 DAG-210, CTX-215, BUILD-220, APP-230 CodeGraph snapshot and evidence-store adapters contract conformance and migration gate
3 — lifecycle QUAL-120 APP-240, CACHE-250 OPS-310, OPS-320 prove one lifecycle; then delete duplicate paths
4 — golden apps INV-160 split by language as lanes free REPAIR-260, UX-270, SAMPLE-280 SBOM-340, then DEP-330 G2 and G3 evidence review
5 — hardening TEST-380 PORT-370 SEC-360 implementation signed matrix and adversarial gate
6 — release BENCH-390 MOD-400, then optional LIVE-405 prototype DOC-410 REL-420, score recomputation, signed release

Integration protocol

Each task lands as a narrow change set containing:

  1. contract/schema and compatibility position when relevant;
  2. neutral value or application seam before adapters;
  3. unit, negative/adversarial, and one seam-level conformance test;
  4. user-facing errors that distinguish unsupported, unauthenticated, unqualified, and failed states;
  5. updated design traceability and any affected diagrams; and
  6. regenerated identities through framework tooling rather than manual digest editing.

Agents should use separate branches/worktrees. Only the integration owner edits shared schema indexes, package exports, top-level CLI registration, or the authority marker in a wave. Do not let multiple agents edit generation.py, rebuild.py, or conformance_runner.py concurrently: land the public seam first, then give one owner the strangler deletion.

flowchart LR
    subgraph W["One parallel wave"]
      A["Lane A<br/>contract or domain"]
      B["Lane B<br/>application or adapter"]
      C["Lane C<br/>proof or operations"]
    end
    A --> I["Integration owner"]
    B --> I
    C --> I
    I --> C1["Compatibility + architecture"]
    C1 --> C2["Unit + adversarial"]
    C2 --> C3["Lifecycle E2E"]
    C3 --> C4["Documentation authority"]
    C4 --> M["Merge and score evidence"]

Finding-to-delivery traceability

Assessment finding Primary tasks Gate that closes it
source-free promotion is false FND-001, AUTH-100, PROM-110, QUAL-120 G1/G2
qualification counts commands and trusts provider surfaces QUAL-120, INV-130, TEST-380 G2
Component graph and coding-agent context are flattened COMP-190, DAG-210, CTX-215, BUILD-220, APP-240, BENCH-390 G3
initialized project has no lifecycle APP-230, APP-240, UX-270, SAMPLE-280 G2
inverse coverage is circular and truncated INV-130 through INV-160 G3/G4
published v1 changed and version stayed 0.1.1 FND-002 G1
current receipt and trusted CI are absent OPS-300, OPS-310, REL-420 G2/G3
CodeGraph daemon conflicts with validation FND-004 G1
execution is non-hermetic SEC-360 G4
repository dependencies are test doubles DEP-330, SBOM-340 G3
component.json is intent plus lock LOCK-200 G2/G3
human/LLM specs are flat or repeat shared guidance SPEC-205, LOCK-200, CTX-215 G2/G3
generated code has no bounded repair REPAIR-260 G3
run experience is not promoted into reviewed durable authority LEARN-265 G3
scope and private helper reuse outran proof APP-230, SAMPLE-280, MOD-400 G3
portability is exit-code aggregation PORT-370 G4
test strength is count-based QUAL-120, TEST-380 G3

Milestone definitions of done

G1 — truthful alpha

G2 — usable alpha

G3 — composable beta

G4 — enterprise candidate

G5 — mature

Anti-goals and explicit deferrals

Maintaining this plan

The integration owner updates checkbox state only with a link or identity for the acceptance evidence. A task may be implemented but remain unaccepted. At each release candidate, BENCH-390 recomputes scores and records the reason for every movement or non-movement. If implementation teaches that a contract is wrong, revise this plan and its ADR before adding a compatibility workaround in code.

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